类 yii\helpers\ArrayHelper
继承关系 | yii\helpers\ArrayHelper » yii\helpers\BaseArrayHelper |
---|---|
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/helpers/ArrayHelper.php |
ArrayHelper 提供了您可以在应用程序中使用的其他数组功能。
有关 ArrayHelper 的更多详细信息和使用方法,请参阅数组助手指南文章。
公共方法
方法详情
定义于: yii\helpers\BaseArrayHelper::filter()
根据指定的规则过滤数组。
例如
$array = [
'A' => [1, 2],
'B' => [
'C' => 1,
'D' => 2,
],
'E' => 1,
];
$result = \yii\helpers\ArrayHelper::filter($array, ['A']);
// $result will be:
// [
// 'A' => [1, 2],
// ]
$result = \yii\helpers\ArrayHelper::filter($array, ['A', 'B.C']);
// $result will be:
// [
// 'A' => [1, 2],
// 'B' => ['C' => 1],
// ]
$result = \yii\helpers\ArrayHelper::filter($array, ['B', '!B.C']);
// $result will be:
// [
// 'B' => ['D' => 2],
// ]
public static array filter ( $array, $filters ) | ||
$array | 数组 |
源数组 |
$filters | 可迭代对象 |
定义应保留或从结果中删除的数组键的规则。每个规则是
|
返回值 | 数组 |
已过滤的数组 |
---|
public static function filter($array, $filters)
{
$result = [];
$excludeFilters = [];
foreach ($filters as $filter) {
if (!is_string($filter) && !is_int($filter)) {
continue;
}
if (is_string($filter) && strncmp($filter, '!', 1) === 0) {
$excludeFilters[] = substr($filter, 1);
continue;
}
$nodeValue = $array; //set $array as root node
$keys = explode('.', (string) $filter);
foreach ($keys as $key) {
if (!array_key_exists($key, $nodeValue)) {
continue 2; //Jump to next filter
}
$nodeValue = $nodeValue[$key];
}
//We've found a value now let's insert it
$resultNode = &$result;
foreach ($keys as $key) {
if (!array_key_exists($key, $resultNode)) {
$resultNode[$key] = [];
}
$resultNode = &$resultNode[$key];
}
$resultNode = $nodeValue;
}
foreach ($excludeFilters as $filter) {
$excludeNode = &$result;
$keys = explode('.', (string) $filter);
$numNestedKeys = count($keys) - 1;
foreach ($keys as $i => $key) {
if (!array_key_exists($key, $excludeNode)) {
continue 2; //Jump to next filter
}
if ($i < $numNestedKeys) {
$excludeNode = &$excludeNode[$key];
} else {
unset($excludeNode[$key]);
break;
}
}
}
return $result;
}
定义于: yii\helpers\BaseArrayHelper::getColumn()
返回数组中指定列的值。
输入数组应为多维数组或对象数组。
例如,
$array = [
['id' => '123', 'data' => 'abc'],
['id' => '345', 'data' => 'def'],
];
$result = ArrayHelper::getColumn($array, 'id');
// the result is: ['123', '345']
// using anonymous function
$result = ArrayHelper::getColumn($array, function ($element) {
return $element['id'];
});
public static array getColumn ( $array, $name, $keepKeys = true ) | ||
$array | 数组 | |
$name | integer|string|array|Closure | |
$keepKeys | 布尔值 |
是否保留数组键。如果为 false,则结果数组将使用整数重新索引。 |
返回值 | 数组 |
列值的列表 |
---|
public static function getColumn($array, $name, $keepKeys = true)
{
$result = [];
if ($keepKeys) {
foreach ($array as $k => $element) {
$result[$k] = static::getValue($element, $name);
}
} else {
foreach ($array as $element) {
$result[] = static::getValue($element, $name);
}
}
return $result;
}
定义于: yii\helpers\BaseArrayHelper::getValue()
使用给定的键或属性名称检索数组元素或对象属性的值。
如果键不存在于数组中,则改为返回默认值。从对象获取值时不使用。
可以使用点格式指定键以检索子数组的值或嵌入对象的属性。特别是,如果键为 x.y.z
,则返回值将为 $array['x']['y']['z']
或 $array->x->y->z
(如果 $array
是一个对象)。如果 $array['x']
或 $array->x
既不是数组也不是对象,则将返回默认值。请注意,如果数组已经具有元素 x.y.z
,则将返回其值,而不是遍历子数组。因此,最好通过指定键名称数组来完成,例如 ['x', 'y', 'z']
。
以下是一些使用示例,
// working with array
$username = \yii\helpers\ArrayHelper::getValue($_POST, 'username');
// working with object
$username = \yii\helpers\ArrayHelper::getValue($user, 'username');
// working with anonymous function
$fullName = \yii\helpers\ArrayHelper::getValue($user, function ($user, $defaultValue) {
return $user->firstName . ' ' . $user->lastName;
});
// using dot format to retrieve the property of embedded object
$street = \yii\helpers\ArrayHelper::getValue($users, 'address.street');
// using an array of keys to retrieve the value
$value = \yii\helpers\ArrayHelper::getValue($versions, ['1.0', 'date']);
public static mixed getValue ( $array, $key, $default = null ) | ||
$array | array|object |
要从中提取值的数组或对象 |
$key | string|Closure|array |
数组元素的键名、键的数组或对象的属性名,或返回值的匿名函数。匿名函数签名应为: |
$default | 混合类型 |
如果指定的数组键不存在,则返回的默认值。从对象获取值时不使用。 |
返回值 | 混合类型 |
如果找到,则为元素的值,否则为默认值 |
---|
public static function getValue($array, $key, $default = null)
{
if ($key instanceof \Closure) {
return $key($array, $default);
}
if (is_array($key)) {
$lastKey = array_pop($key);
foreach ($key as $keyPart) {
$array = static::getValue($array, $keyPart);
}
$key = $lastKey;
}
if (is_object($array) && property_exists($array, $key)) {
return $array->$key;
}
if (static::keyExists($key, $array)) {
return $array[$key];
}
if ($key && ($pos = strrpos($key, '.')) !== false) {
$array = static::getValue($array, substr($key, 0, $pos), $default);
$key = substr($key, $pos + 1);
}
if (static::keyExists($key, $array)) {
return $array[$key];
}
if (is_object($array)) {
// this is expected to fail if the property does not exist, or __get() is not implemented
// it is not reliably possible to check whether a property is accessible beforehand
try {
return $array->$key;
} catch (\Exception $e) {
if ($array instanceof ArrayAccess) {
return $default;
}
throw $e;
}
}
return $default;
}
定义于: yii\helpers\BaseArrayHelper::htmlDecode()
将字符串数组中的 HTML 实体解码为相应的字符。
默认情况下,只解码数组值。如果值为数组,此方法也会递归解码它。仅解码字符串值。
另请参阅 https://php.ac.cn/manual/en/function.htmlspecialchars-decode.php。
public static 数组 htmlDecode ( $data, $valuesOnly = true ) | ||
$data | 数组 |
要解码的数据 |
$valuesOnly | 布尔值 |
是否仅解码数组值。如果为 |
返回值 | 数组 |
解码后的数据 |
---|
public static function htmlDecode($data, $valuesOnly = true)
{
$d = [];
foreach ($data as $key => $value) {
if (!$valuesOnly && is_string($key)) {
$key = htmlspecialchars_decode($key, ENT_QUOTES | ENT_SUBSTITUTE);
}
if (is_string($value)) {
$d[$key] = htmlspecialchars_decode($value, ENT_QUOTES | ENT_SUBSTITUTE);
} elseif (is_array($value)) {
$d[$key] = static::htmlDecode($value, $valuesOnly);
} else {
$d[$key] = $value;
}
}
return $d;
}
定义于: yii\helpers\BaseArrayHelper::htmlEncode()
将字符串数组中的特殊字符编码为 HTML 实体。
默认情况下,只编码数组值。如果值为数组,此方法也会递归编码它。仅编码字符串值。
另请参阅 https://php.ac.cn/manual/en/function.htmlspecialchars.php。
public static 数组 htmlEncode ( $data, $valuesOnly = true, $charset = null ) | ||
$data | 数组 |
要编码的数据 |
$valuesOnly | 布尔值 |
是否仅编码数组值。如果为 false,则数组键和数组值都将被编码。 |
$charset | 字符串|空 |
数据使用的字符集。如果未设置,则将使用 yii\base\Application::$charset。 |
返回值 | 数组 |
编码后的数据 |
---|
public static function htmlEncode($data, $valuesOnly = true, $charset = null)
{
if ($charset === null) {
$charset = Yii::$app ? Yii::$app->charset : 'UTF-8';
}
$d = [];
foreach ($data as $key => $value) {
if (!$valuesOnly && is_string($key)) {
$key = htmlspecialchars($key, ENT_QUOTES | ENT_SUBSTITUTE, $charset);
}
if (is_string($value)) {
$d[$key] = htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, $charset);
} elseif (is_array($value)) {
$d[$key] = static::htmlEncode($value, $valuesOnly, $charset);
} else {
$d[$key] = $value;
}
}
return $d;
}
定义于: yii\helpers\BaseArrayHelper::index()
根据指定的键索引和/或对数组进行分组。
输入应为多维数组或对象数组。
$key
可以是子数组的键名、对象的属性名,或者必须返回用作键的值的匿名函数。
$groups
是一个键数组,它将用于根据指定的键将输入数组分组到一个或多个子数组中。
如果 $key
指定为 null
或元素对应于键的值为 null
并且未指定 $groups
,则该元素将被丢弃。
例如
$array = [
['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
['id' => '345', 'data' => 'def', 'device' => 'tablet'],
['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
];
$result = ArrayHelper::index($array, 'id');
结果将是一个关联数组,其中键是 id
属性的值
[
'123' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
'345' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']
// The second element of an original array is overwritten by the last element because of the same id
]
在分组数组中也可以使用匿名函数。
$result = ArrayHelper::index($array, function ($element) {
return $element['id'];
});
将 id
作为第三个参数将按 id
对 $array
进行分组
$result = ArrayHelper::index($array, null, 'id');
结果将是一个多维数组,第一级按 id
分组,第二级按 device
分组,第三级按 data
索引。
[
'123' => [
['id' => '123', 'data' => 'abc', 'device' => 'laptop']
],
'345' => [ // all elements with this index are present in the result array
['id' => '345', 'data' => 'def', 'device' => 'tablet'],
['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
]
]
在分组键数组中也可以使用匿名函数
$result = ArrayHelper::index($array, 'data', [function ($element) {
return $element['id'];
}, 'device']);
结果将是一个多维数组,第一级按 id
分组,第二级按 device
分组,第三级按 data
索引。
[
'123' => [
'laptop' => [
'abc' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop']
]
],
'345' => [
'tablet' => [
'def' => ['id' => '345', 'data' => 'def', 'device' => 'tablet']
],
'smartphone' => [
'hgi' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']
]
]
]
public static 数组 index ( $array, $key, $groups = [] ) | ||
$array | 数组 |
需要索引或分组的数组 |
$key | 字符串|闭包|空 |
列名或匿名函数,其结果将用于索引数组 |
$groups | 字符串|字符串[]|闭包[]|空 |
键数组,将用于按一个或多个键对输入数组进行分组。如果特定元素的 |
返回值 | 数组 |
已索引和/或分组的数组 |
---|
public static function index($array, $key, $groups = [])
{
$result = [];
$groups = (array) $groups;
foreach ($array as $element) {
$lastArray = &$result;
foreach ($groups as $group) {
$value = static::getValue($element, $group);
if (!array_key_exists($value, $lastArray)) {
$lastArray[$value] = [];
}
$lastArray = &$lastArray[$value];
}
if ($key === null) {
if (!empty($groups)) {
$lastArray[] = $element;
}
} else {
$value = static::getValue($element, $key);
if ($value !== null) {
if (is_float($value)) {
$value = StringHelper::floatToString($value);
}
$lastArray[$value] = $element;
}
}
unset($lastArray);
}
return $result;
}
定义于: yii\helpers\BaseArrayHelper::isAssociative()
返回一个值,指示给定数组是否为关联数组。
如果所有键都是字符串,则数组是关联数组。如果 $allStrings
为 false,则如果数组的至少一个键是字符串,则该数组将被视为关联数组。
请注意,空数组将不会被视为关联数组。
public static 布尔值 isAssociative ( $array, $allStrings = true ) | ||
$array | 数组 |
正在检查的数组 |
$allStrings | 布尔值 |
为了将数组视为关联数组,数组键是否必须全部为字符串。 |
返回值 | 布尔值 |
数组是否为关联数组 |
---|
public static function isAssociative($array, $allStrings = true)
{
if (empty($array) || !is_array($array)) {
return false;
}
if ($allStrings) {
foreach ($array as $key => $value) {
if (!is_string($key)) {
return false;
}
}
return true;
}
foreach ($array as $key => $value) {
if (is_string($key)) {
return true;
}
}
return false;
}
定义于: yii\helpers\BaseArrayHelper::isIn()
检查数组或Traversable是否包含元素。
此方法与 PHP 函数 in_array() 执行相同的操作,但此外还可以用于实现 Traversable 接口的对象。
public static 布尔值 isIn ( $needle, $haystack, $strict = false ) | ||
$needle | 混合类型 |
要查找的值。 |
$haystack | 可迭代对象 |
要搜索的值集。 |
$strict | 布尔值 |
是否启用严格 ( |
返回值 | 布尔值 |
如果 |
---|---|---|
抛出 | yii\base\InvalidArgumentException |
如果 |
public static function isIn($needle, $haystack, $strict = false)
{
if (!static::isTraversable($haystack)) {
throw new InvalidArgumentException('Argument $haystack must be an array or implement Traversable');
}
if (is_array($haystack)) {
return in_array($needle, $haystack, $strict);
}
foreach ($haystack as $value) {
if ($strict ? $needle === $value : $needle == $value) {
return true;
}
}
return false;
}
定义于: yii\helpers\BaseArrayHelper::isIndexed()
返回一个值,指示给定数组是否为索引数组。
如果所有键都是整数,则数组是索引数组。如果 $consecutive
为 true,则数组键必须是从 0 开始的连续序列。
请注意,空数组将被视为索引数组。
public static 布尔值 isIndexed ( $array, $consecutive = false ) | ||
$array | 数组 |
正在检查的数组 |
$consecutive | 布尔值 |
为了将数组视为索引数组,数组键是否必须是连续序列。 |
返回值 | 布尔值 |
数组是否为索引数组 |
---|
public static function isIndexed($array, $consecutive = false)
{
if (!is_array($array)) {
return false;
}
if (empty($array)) {
return true;
}
$keys = array_keys($array);
if ($consecutive) {
return $keys === array_keys($keys);
}
foreach ($keys as $key) {
if (!is_int($key)) {
return false;
}
}
return true;
}
定义于: yii\helpers\BaseArrayHelper::isSubset()
检查数组或Traversable是否为另一个数组或Traversable的子集。
如果 $needles
的所有元素都包含在 $haystack
中,则此方法将返回 true
。如果至少缺少一个元素,则将返回 false
。
public static 布尔值 isSubset ( $needles, $haystack, $strict = false ) | ||
$needles | 可迭代对象 |
必须全部在 |
$haystack | 可迭代对象 |
要搜索的值集。 |
$strict | 布尔值 |
是否启用严格 ( |
返回值 | 布尔值 |
如果 |
---|---|---|
抛出 | yii\base\InvalidArgumentException |
如果 |
public static function isSubset($needles, $haystack, $strict = false)
{
if (!static::isTraversable($needles)) {
throw new InvalidArgumentException('Argument $needles must be an array or implement Traversable');
}
foreach ($needles as $needle) {
if (!static::isIn($needle, $haystack, $strict)) {
return false;
}
}
return true;
}
定义于: yii\helpers\BaseArrayHelper::isTraversable()
检查变量是否为数组或Traversable。
此方法与 PHP 函数 is_array() 的功能相同,但额外支持实现 Traversable 接口的对象。
public static 布尔型 isTraversable ( $var ) | ||
$var | 混合类型 |
要评估的变量。 |
返回值 | 布尔值 |
$var 是否可以通过 foreach 遍历 |
---|
public static function isTraversable($var)
{
return is_array($var) || $var instanceof Traversable;
}
定义于: yii\helpers\BaseArrayHelper::keyExists()
检查给定数组是否包含指定的键。
此方法增强了 array_key_exists()
函数,支持不区分大小写的键比较。
public static 布尔型 keyExists ( $key, $array, $caseSensitive = true ) | ||
$key | 字符串|整数 |
要检查的键。 |
$array | 数组|ArrayAccess |
包含要检查的键的数组。 |
$caseSensitive | 布尔值 |
键比较是否区分大小写。 |
返回值 | 布尔值 |
数组是否包含指定的键。 |
---|
public static function keyExists($key, $array, $caseSensitive = true)
{
// ToDo: This check can be removed when the minimum PHP version is >= 8.1 (Yii2.2)
if (is_float($key)) {
$key = (int)$key;
}
if ($caseSensitive) {
if (is_array($array) && array_key_exists($key, $array)) {
return true;
}
// Cannot use `array_has_key` on Objects for PHP 7.4+, therefore we need to check using [[ArrayAccess::offsetExists()]]
return $array instanceof ArrayAccess && $array->offsetExists($key);
}
if ($array instanceof ArrayAccess) {
throw new InvalidArgumentException('Second parameter($array) cannot be ArrayAccess in case insensitive mode');
}
foreach (array_keys($array) as $k) {
if (strcasecmp($key, $k) === 0) {
return true;
}
}
return false;
}
定义于: yii\helpers\BaseArrayHelper::map()
从多维数组或对象数组构建映射(键值对)。
$from
和 $to
参数指定用于设置映射的键名或属性名。可以选择根据分组字段 $group
进一步对映射进行分组。
例如,
$array = [
['id' => '123', 'name' => 'aaa', 'class' => 'x'],
['id' => '124', 'name' => 'bbb', 'class' => 'x'],
['id' => '345', 'name' => 'ccc', 'class' => 'y'],
];
$result = ArrayHelper::map($array, 'id', 'name');
// the result is:
// [
// '123' => 'aaa',
// '124' => 'bbb',
// '345' => 'ccc',
// ]
$result = ArrayHelper::map($array, 'id', 'name', 'class');
// the result is:
// [
// 'x' => [
// '123' => 'aaa',
// '124' => 'bbb',
// ],
// 'y' => [
// '345' => 'ccc',
// ],
// ]
public static 数组 map ( $array, $from, $to, $group = null ) | ||
$array | 数组 | |
$from | 字符串|Closure | |
$to | 字符串|Closure | |
$group | 字符串|闭包|空 |
public static function map($array, $from, $to, $group = null)
{
$result = [];
foreach ($array as $element) {
$key = static::getValue($element, $from);
$value = static::getValue($element, $to);
if ($group !== null) {
$result[static::getValue($element, $group)][$key] = $value;
} else {
$result[$key] = $value;
}
}
return $result;
}
定义于: yii\helpers\BaseArrayHelper::merge()
将两个或多个数组递归合并为一个。
如果每个数组都具有相同字符串键值的元素,则后者将覆盖前者(与 array_merge_recursive 不同)。如果两个数组都具有数组类型的元素且具有相同的键,则将进行递归合并。对于整数键元素,来自后一个数组的元素将附加到前一个数组。您可以使用 yii\helpers\UnsetArrayValue 对象从上一个数组中取消设置值,或使用 yii\helpers\ReplaceArrayValue 强制替换前一个值,而不是递归合并。
public static 数组 merge ( $a, $b ) | ||
$a | 数组 |
要合并到的数组。 |
$b | 数组 |
要合并的数组。您可以通过第三个参数、第四个参数等指定其他数组。 |
返回值 | 数组 |
合并后的数组(原始数组不会更改)。 |
---|
public static function merge($a, $b)
{
$args = func_get_args();
$res = array_shift($args);
while (!empty($args)) {
foreach (array_shift($args) as $k => $v) {
if ($v instanceof UnsetArrayValue) {
unset($res[$k]);
} elseif ($v instanceof ReplaceArrayValue) {
$res[$k] = $v->value;
} elseif (is_int($k)) {
if (array_key_exists($k, $res)) {
$res[] = $v;
} else {
$res[$k] = $v;
}
} elseif (is_array($v) && isset($res[$k]) && is_array($res[$k])) {
$res[$k] = static::merge($res[$k], $v);
} else {
$res[$k] = $v;
}
}
}
return $res;
}
定义于: yii\helpers\BaseArrayHelper::multisort()
根据一个或多个键对对象或数组(具有相同结构)的数组进行排序。
public static void multisort ( &$array, $key, $direction = SORT_ASC, $sortFlag = SORT_REGULAR ) | ||
$array | 数组 |
要排序的数组。调用此方法后,数组将被修改。 |
$key | string|Closure|array |
要按其排序的键。这指的是子数组元素的键名、对象的属性名或返回用于比较目的的值的匿名函数。匿名函数签名应为: |
$direction | 整数|数组 |
排序方向。它可以是 |
$sortFlag | 整数|数组 |
PHP 排序标志。有效值包括 |
抛出 | yii\base\InvalidArgumentException |
如果 $direction 或 $sortFlag 参数的元素数量与 $key 的元素数量不一致。 |
---|
public static function multisort(&$array, $key, $direction = SORT_ASC, $sortFlag = SORT_REGULAR)
{
$keys = is_array($key) ? $key : [$key];
if (empty($keys) || empty($array)) {
return;
}
$n = count($keys);
if (is_scalar($direction)) {
$direction = array_fill(0, $n, $direction);
} elseif (count($direction) !== $n) {
throw new InvalidArgumentException('The length of $direction parameter must be the same as that of $keys.');
}
if (is_scalar($sortFlag)) {
$sortFlag = array_fill(0, $n, $sortFlag);
} elseif (count($sortFlag) !== $n) {
throw new InvalidArgumentException('The length of $sortFlag parameter must be the same as that of $keys.');
}
$args = [];
foreach ($keys as $i => $k) {
$flag = $sortFlag[$i];
$args[] = static::getColumn($array, $k);
$args[] = $direction[$i];
$args[] = $flag;
}
// This fix is used for cases when main sorting specified by columns has equal values
// Without it it will lead to Fatal Error: Nesting level too deep - recursive dependency?
$args[] = range(1, count($array));
$args[] = SORT_ASC;
$args[] = SORT_NUMERIC;
$args[] = &$array;
call_user_func_array('array_multisort', $args);
}
定义于: yii\helpers\BaseArrayHelper::recursiveSort()
递归排序数组。
public static 数组 recursiveSort ( 数组 &$array, $sorter = null ) | ||
$array | 数组 |
通过引用传递的数组。 |
$sorter | 可调用|空 |
数组排序器。如果省略,则按值对索引数组排序,按键对关联数组排序。 |
public static function recursiveSort(array &$array, $sorter = null)
{
foreach ($array as &$value) {
if (is_array($value)) {
static::recursiveSort($value, $sorter);
}
}
unset($value);
if ($sorter === null) {
$sorter = static::isIndexed($array) ? 'sort' : 'ksort';
}
call_user_func_array($sorter, [&$array]);
return $array;
}
定义于: yii\helpers\BaseArrayHelper::remove()
从数组中删除一个项目并返回该值。如果键在数组中不存在,则改为返回默认值。
用法示例:
// $array = ['type' => 'A', 'options' => [1, 2]];
// working with array
$type = \yii\helpers\ArrayHelper::remove($array, 'type');
// $array content
// $array = ['options' => [1, 2]];
public static 混合|空 remove ( &$array, $key, $default = null ) | ||
$array | 数组 |
要从中提取值的数组。 |
$key | 字符串 |
数组元素的键名。 |
$default | 混合类型 |
如果指定的键不存在,则返回的默认值。 |
返回值 | 混合|空 |
如果找到,则为元素的值,否则为默认值 |
---|
public static function remove(&$array, $key, $default = null)
{
// ToDo: This check can be removed when the minimum PHP version is >= 8.1 (Yii2.2)
if (is_float($key)) {
$key = (int)$key;
}
if (is_array($array) && array_key_exists($key, $array)) {
$value = $array[$key];
unset($array[$key]);
return $value;
}
return $default;
}
定义于: yii\helpers\BaseArrayHelper::removeValue()
从数组中删除具有匹配值的项目并返回已删除的项目。
示例:
$array = ['Bob' => 'Dylan', 'Michael' => 'Jackson', 'Mick' => 'Jagger', 'Janet' => 'Jackson'];
$removed = \yii\helpers\ArrayHelper::removeValue($array, 'Jackson');
// result:
// $array = ['Bob' => 'Dylan', 'Mick' => 'Jagger'];
// $removed = ['Michael' => 'Jackson', 'Janet' => 'Jackson'];
public static 数组 removeValue ( &$array, $value ) | ||
$array | 数组 |
要从中查找值的数组。 |
$value | 混合类型 |
要从数组中删除的值。 |
返回值 | 数组 |
已从数组中删除的项。 |
---|
public static function removeValue(&$array, $value)
{
$result = [];
if (is_array($array)) {
foreach ($array as $key => $val) {
if ($val === $value) {
$result[$key] = $val;
unset($array[$key]);
}
}
}
return $result;
}
定义于: yii\helpers\BaseArrayHelper::setValue()
将值写入指定键路径处的关联数组。
如果尚不存在此类键路径,则将递归创建它。如果键存在,它将被覆盖。
$array = [
'key' => [
'in' => [
'val1',
'key' => 'val'
]
]
];
ArrayHelper::setValue($array, 'key.in.0', ['arr' => 'val']);
的结果如下所示
[
'key' => [
'in' => [
['arr' => 'val'],
'key' => 'val'
]
]
]
ArrayHelper::setValue($array, 'key.in', ['arr' => 'val']);
或 ArrayHelper::setValue($array, ['key', 'in'], ['arr' => 'val']);
的结果如下所示
[
'key' => [
'in' => [
'arr' => 'val'
]
]
]
public static void setValue ( &$array, $path, $value ) | ||
$array | 数组 |
要向其中写入值的数组。 |
$path | 字符串|数组|空 |
要向 |
$value | 混合类型 |
要写入的值。 |
public static function setValue(&$array, $path, $value)
{
if ($path === null) {
$array = $value;
return;
}
$keys = is_array($path) ? $path : explode('.', $path);
while (count($keys) > 1) {
$key = array_shift($keys);
if (!isset($array[$key])) {
$array[$key] = [];
}
if (!is_array($array[$key])) {
$array[$key] = [$array[$key]];
}
$array = &$array[$key];
}
$array[array_shift($keys)] = $value;
}
定义于: yii\helpers\BaseArrayHelper::toArray()
将对象或对象数组转换为数组。
public static 数组 toArray ( $object, $properties = [], $recursive = true ) | ||
$object | 对象|数组|字符串 |
要转换为数组的对象 |
$properties | 数组 |
一个从对象类名到需要放入结果数组的属性的映射。为每个类指定的属性是一个以下格式的数组
|
$recursive | 布尔值 |
是否递归地将作为对象的属性转换为数组。 |
返回值 | 数组 |
对象的数组表示形式 |
---|
public static function toArray($object, $properties = [], $recursive = true)
{
if (is_array($object)) {
if ($recursive) {
foreach ($object as $key => $value) {
if (is_array($value) || is_object($value)) {
$object[$key] = static::toArray($value, $properties, true);
}
}
}
return $object;
} elseif ($object instanceof \DateTimeInterface) {
return (array)$object;
} elseif (is_object($object)) {
if (!empty($properties)) {
$className = get_class($object);
if (!empty($properties[$className])) {
$result = [];
foreach ($properties[$className] as $key => $name) {
if (is_int($key)) {
$result[$name] = $object->$name;
} else {
$result[$key] = static::getValue($object, $name);
}
}
return $recursive ? static::toArray($result, $properties) : $result;
}
}
if ($object instanceof Arrayable) {
$result = $object->toArray([], [], $recursive);
} else {
$result = [];
foreach ($object as $key => $value) {
$result[$key] = $value;
}
}
return $recursive ? static::toArray($result, $properties) : $result;
}
return [$object];
}
注册 或 登录 以发表评论。