Class yii\helpers\BaseArrayHelper
继承 | yii\helpers\BaseArrayHelper |
---|---|
子类 | yii\helpers\ArrayHelper |
可用版本自 | 2.0 |
源码 | https://github.com/yiichina/yii2/blob/api/framework/helpers/BaseArrayHelper.php |
BaseArrayHelper 为 yii\helpers\ArrayHelper 提供了具体的实现方法。
不要使用 BaseArrayHelper 类。使用 yii\helpers\ArrayHelper 类来代替。
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
filter() | 根据指定的规则筛选数组。 | yii\helpers\BaseArrayHelper |
getColumn() | 返回数组中指定列的值。 传入的数组类型可以是多维数组或者对象数组。 | yii\helpers\BaseArrayHelper |
getValue() | 检索具有给定键或属性名的数组元素或对象属性的值。 如果这个数组中不存在键,将返回默认值。 从对象中获取值时不使用。 | yii\helpers\BaseArrayHelper |
htmlDecode() | 将 HTML 实体解码为字符串数组中的相应字符。 只有数组值将被默认解码。 如果数组是一个值,此方法还将递归的进行解码。 只有字符串值才会被解码。 | yii\helpers\BaseArrayHelper |
htmlEncode() | 将字符串数组中的特殊字符编码为 HTML 实体。 默认情况下只对数组值进行编码。 如果数组是一个值,此方法还将递归的进行编码。 只有字符串值才会被编码。 | yii\helpers\BaseArrayHelper |
index() | 根据指定的键对数组进行索引和/或分组。 输入的应该是多维数组或对象数组。 | yii\helpers\BaseArrayHelper |
isAssociative() | 返回一个值,该值指示给定数组是否是关联数组。 | yii\helpers\BaseArrayHelper |
isIn() | 检查是否为数组或 Traversable 包含一个元素。 | yii\helpers\BaseArrayHelper |
isIndexed() | 返回一个值,该值指示给定数组是否是索引数组。 | yii\helpers\BaseArrayHelper |
isSubset() | 检测是否为一个数组或者 Traversable 是另一个数组的子集还是 Traversable。 | yii\helpers\BaseArrayHelper |
isTraversable() | 检查变量是数组还是 Traversable。 | yii\helpers\BaseArrayHelper |
keyExists() | 检查给定数组是否包含指定键。
此方法通过支持不区分大小写键的比较增强了 array_key_exists()
函数。 |
yii\helpers\BaseArrayHelper |
map() | 从多维数组当中或者对象数组(key-value pairs)构建一个映射。
那个 $from 和 $to 参数指定的键名或者属性名来设置映射。
可选,可以根据 $group 变量对映射键值对进一步分组。 |
yii\helpers\BaseArrayHelper |
merge() | 递归合并 2 个及以上的数组。 如果每个数组元素有相同的字符串键值对, 后者将会覆盖前者(不同于 array_merge_recursive)。 如果两个数组都有数组类型的元素并且具有相同的键, 那么将进行递归合并。 对于整型键类型元素,后面数组中的元素将 会被追加到前面的数组中去。 你能够使用 yii\helpers\UnsetArrayValue 对象从之前的数组中设置值或者 yii\helpers\ReplaceArrayValue 强制替换原先的值来替代递归数组合并。 | yii\helpers\BaseArrayHelper |
multisort() | 按一个或多个键对对象数组或者数组(具有相同结构)进行排序。 | yii\helpers\BaseArrayHelper |
remove() | 从数组中移除元素并返回值。 如果数组中不存在键,则默认值将被返回。 | yii\helpers\BaseArrayHelper |
removeValue() | 从数组中移除对应的值并返回移除的项。 | yii\helpers\BaseArrayHelper |
setValue() | 在指定键的路径上将值写入关联数组。 如果没有这样的关键路径,它将通过递归创建。 如果键存在,就会被覆盖。 | yii\helpers\BaseArrayHelper |
toArray() | 将对象或者对象数组转换成数组。 | yii\helpers\BaseArrayHelper |
方法详情
根据指定的规则筛选数组。
比如:
$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 | array | 源数组 |
$filters | array | 定义应该从结果中保留或删除的数组键的规则。 具体规则如下:
|
return | array | 过滤后的数组 |
---|
返回数组中指定列的值。 传入的数组类型可以是多维数组或者对象数组。
比如,
$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 | array | |
$name | integer|string|Closure | |
$keepKeys | boolean | 是否保留数组的键。如果不保留, 数组的结果的索引将被重新定义为整数。 |
return | array | 返回列表的列值 |
---|
检索具有给定键或属性名的数组元素或对象属性的值。 如果这个数组中不存在键,将返回默认值。 从对象中获取值时不使用。
数组中的键可以指定圆点来检索子数组中的值或者对象中包含的属性。
特别是,如果键是 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 | mixed | 如果指定的数组当中的键不存在则返回默认值。 从对象当中获取值时不使用。 |
return | mixed | 找到该元素当中的值并返回,否则直接返回默认的值。 |
---|
将 HTML 实体解码为字符串数组中的相应字符。 只有数组值将被默认解码。 如果数组是一个值,此方法还将递归的进行解码。 只有字符串值才会被解码。
参见 http://www.php.net/manual/en/function.htmlspecialchars-decode.php.
public static array htmlDecode($data, $valuesOnly = true) | ||
$data | array | 将要被解码的数据 |
$valuesOnly | boolean | 是否只对数组值进行解码。 如果不是,数组的键和值都将被解码。 |
return | array | 返回解码的数据 |
---|
将字符串数组中的特殊字符编码为 HTML 实体。 默认情况下只对数组值进行编码。 如果数组是一个值,此方法还将递归的进行编码。 只有字符串值才会被编码。
参见 http://www.php.net/manual/en/function.htmlspecialchars.php.
public static array htmlEncode($data, $valuesOnly = true, $charset = null) | ||
$data | array | 将要被编码的数据 |
$valuesOnly | boolean | 是否只对数组值进行编码。 如果不是,数组的键和值将同时被编码。 |
$charset | string | 数据使用的字符集。如果没有设置, yii\base\Application::$charset 将被使用。 |
return | array | 返回编码的数据 |
---|
根据指定的键对数组进行索引和/或分组。 输入的应该是多维数组或对象数组。
这个 $key 可以是子数组的键名,对象的属性名, 或匿名函数返回的值将被用作键。
$groups 是数组中的键, 用于根据指定的键将输入数组分组为一个或多个子数组。
如果 $key
被指定为 null
或者与该键对应的元素的值除未指定的 $groups
外为 null
那么该元素将被丢弃。
比如:
$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
将作为第三个参数传入到 $array
并按 id
进行分组:
$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 array index($array, $key, $groups = []) | ||
$array | array | 需要索引或者分组的数组 |
$key | string|Closure|null | 列名或者匿名函数的结果将用于对数组进行分组 |
$groups | string|string[]|Closure[]|null | 数组当中的键,将用一个或多个键来对传入的数组进行分组。 如果 $key 属性或者它的值的特定元素为空和 $groups 没有定义,数组的元素将被丢弃。 因此,如果变量 $groups 是指定的,数组元素将被添加到没有任何键的数组当中。 此参数自版本 2.0.8 起可用。 |
return | array | 索引数组和/或分组数组 |
---|
返回一个值,该值指示给定数组是否是关联数组。
如果数组的键都是字符串,那么数组就是关联的。如果 $allStrings
设置为假,
如果数组的键中至少有一个是字符串,那么该数组将被视为关联数组。
注意,空数组不会被认为是关联的。
public static boolean isAssociative($array, $allStrings = true) | ||
$array | array | 将被检测的数组 |
$allStrings | boolean | 数组键是否必须为所有字符串 以便数组被视为关联的。 |
return | boolean | 返回数组是否是关联数组 |
---|
检查是否为数组或 Traversable 包含一个元素。
这个方法与 PHP 函数 in_array() 相同 但它还适用于实现 Traversable 接口。
public static boolean isIn($needle, $haystack, $strict = false) | ||
$needle | mixed | 寻找的值。 |
$haystack | array|Traversable | 要寻找的值。 |
$strict | boolean | 是否启用 ( |
return | boolean | 如果 |
---|---|---|
throws | yii\base\InvalidArgumentException | 如果 |
返回一个值,该值指示给定数组是否是索引数组。
如果一个数组的所有键都是整数,那么该数组是索引数组。如果变量 $consecutive
设置为真,
那么数组键必须是从 0 开始的连续序列。
注意,空数组将被认为是索引的。
public static boolean isIndexed($array, $consecutive = false) | ||
$array | array | 将被检测的数组 |
$consecutive | boolean | 数组键是否必须是连续序列 以便数组是不是索引数组。 |
return | boolean | 是否为索引数组 |
---|
检测是否为一个数组或者 Traversable 是另一个数组的子集还是 Traversable。
这个方法将返回 true
,如果 $needles
所有的元素都包含在 $haystack
。
如果至少缺少一个元素的话,将被返回 false
。
public static boolean isSubset($needles, $haystack, $strict = false) | ||
$needles | array|Traversable | 这个值必须 all 在 |
$haystack | array|Traversable | 要搜索的值。 |
$strict | boolean | 是否启用 ( |
return | boolean | 如果 |
---|---|---|
throws | yii\base\InvalidArgumentException | 如果 |
检查变量是数组还是 Traversable。
该方法与 PHP 函数 is_array() 相同, 但是,它还可以用于实现 Traversable 接口。
public static boolean isTraversable($var) | ||
$var | mixed | 被评估的变量。 |
return | boolean | 变量 $var 是否是一个数组 |
---|
检查给定数组是否包含指定键。
此方法通过支持不区分大小写键的比较增强了 array_key_exists()
函数。
public static boolean keyExists($key, $array, $caseSensitive = true) | ||
$key | string | 检测的键名 |
$array | array | 需要检查键的数组 |
$caseSensitive | boolean | 键的比较是否支持区分大小写 |
return | boolean | 数组是否包含指定的键 |
---|
从多维数组当中或者对象数组(key-value pairs)构建一个映射。
那个 $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 array map($array, $from, $to, $group = null) | ||
$array | array | |
$from | string|Closure | |
$to | string|Closure | |
$group | string|Closure |
递归合并 2 个及以上的数组。 如果每个数组元素有相同的字符串键值对, 后者将会覆盖前者(不同于 array_merge_recursive)。 如果两个数组都有数组类型的元素并且具有相同的键, 那么将进行递归合并。 对于整型键类型元素,后面数组中的元素将 会被追加到前面的数组中去。 你能够使用 yii\helpers\UnsetArrayValue 对象从之前的数组中设置值或者 yii\helpers\ReplaceArrayValue 强制替换原先的值来替代递归数组合并。
public static array merge($a, $b) | ||
$a | array | 需要合并的数组 |
$b | array | 需要合并的数组。你能够指定额外的 数组中的第三个参数,第四个参数等。 |
return | array | 合并之后的数组(不改变原始数组。) |
---|
按一个或多个键对对象数组或者数组(具有相同结构)进行排序。
public static void multisort(&$array, $key, $direction = SORT_ASC, $sortFlag = SORT_REGULAR) | ||
$array | array | 要排序的数组。调用此方法后数组将被修改。 |
$key | string|Closure|array | 按 key(s) 进行排序。
引用子数组的键名元素,对象的属性名,或一个匿名函数返回用于比较的值。
匿名函数的签名应该是这样的: |
$direction | integer|array | 排序方向。它可以按照 |
$sortFlag | integer|array | PHP 排序标记。包括有效的值
|
throws | yii\base\InvalidArgumentException | 如果 $direction 或者 $sortFlag 参数的个数 与 $key 参数的个数不一致。 |
---|
从数组中移除元素并返回值。 如果数组中不存在键,则默认值将被返回。
用法示例,
// $array = ['type' => 'A', 'options' => [1, 2]];
// working with array
$type = \yii\helpers\ArrayHelper::remove($array, 'type');
// $array content
// $array = ['options' => [1, 2]];
public static mixed|null remove(&$array, $key, $default = null) | ||
$array | array | 要从中提取值得数组 |
$key | string | 数组元素的键名 |
$default | mixed | 如果指定的键不存在则返回默认值 |
return | mixed|null | 如果找到该元素的值,否则为默认值 |
---|
从数组中移除对应的值并返回移除的项。
比如,
$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 array removeValue(&$array, $value) | ||
$array | array | 查找值得数组 |
$value | string | 从这个数组中移除的值 |
return | array | 返回从数组中移除的项 |
---|
在指定键的路径上将值写入关联数组。 如果没有这样的关键路径,它将通过递归创建。 如果键存在,就会被覆盖。
$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 | array | 将值写入到数组中 |
$path | string|array|null | 你想将值写入到 |
$value | mixed | 被写入的值 |
将对象或者对象数组转换成数组。
public static array toArray($object, $properties = [], $recursive = true) | ||
$object | object|array|string | 要转成数组的对象 |
$properties | array | 从对象类的名称到需要将生成的数组结果集放入到属性中的映射。 每个类的属性集合指定一个以下格式的数组:
|
$recursive | boolean | 是否使用递归的方式将对象的属性转换为数组。 |
return | array | 这种对象的数组表示 |
---|