没有命名空间的类 yii yii\base yii\behaviors yii\caching yii\captcha yii\console yii\console\controllers yii\console\widgets yii\data yii\db yii\db\conditions yii\db\cubrid yii\db\cubrid\conditions yii\db\mssql yii\db\mssql\conditions yii\db\mysql yii\db\oci yii\db\oci\conditions yii\db\pgsql yii\db\sqlite yii\db\sqlite\conditions yii\di yii\filters yii\filters\auth yii\grid yii\helpers yii\i18n yii\log yii\mail yii\mutex yii\rbac yii\rest yii\test yii\validators yii\web yii\widgets

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

方法详情

filter() 公共 静态 方法 (自版本 2.0.9 可用)

根据指定的规则筛选数组。

比如:

$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

定义应该从结果中保留或删除的数组键的规则。 具体规则如下:

  • var - $array['var'] 将被留在数组中。
  • 只有 var.key = `$array['var']['key'] 将留在数组中。
  • !var.key = `$array['var']['key'] 将从结果集中移除。
return array

过滤后的数组

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 array
$name integer|string|Closure
$keepKeys boolean

是否保留数组的键。如果不保留, 数组的结果的索引将被重新定义为整数。

return array

返回列表的列值

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

数组元素的键名,数组当中的键或者对象当中的属性名称,或者一个返回值的匿名函数。 匿名函数应该像这样签名: function($array, $defaultValue)。 在 2.0.4 版本中可以通过数组当中可用的键来传递。

$default mixed

如果指定的数组当中的键不存在则返回默认值。 从对象当中获取值时不使用。

return mixed

找到该元素当中的值并返回,否则直接返回默认的值。

htmlDecode() 公共 静态 方法

将 HTML 实体解码为字符串数组中的相应字符。 只有数组值将被默认解码。 如果数组是一个值,此方法还将递归的进行解码。 只有字符串值才会被解码。

参见 http://www.php.net/manual/en/function.htmlspecialchars-decode.php.

public static array htmlDecode($data, $valuesOnly true)
$data array

将要被解码的数据

$valuesOnly boolean

是否只对数组值进行解码。 如果不是,数组的键和值都将被解码。

return array

返回解码的数据

htmlEncode() 公共 静态 方法

将字符串数组中的特殊字符编码为 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

返回编码的数据

index() 公共 静态 方法

根据指定的键对数组进行索引和/或分组。 输入的应该是多维数组或对象数组。

这个 $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

索引数组和/或分组数组

isAssociative() 公共 静态 方法

返回一个值,该值指示给定数组是否是关联数组。

如果数组的键都是字符串,那么数组就是关联的。如果 $allStrings 设置为假, 如果数组的键中至少有一个是字符串,那么该数组将被视为关联数组。

注意,空数组不会被认为是关联的。

public static boolean isAssociative($array, $allStrings true)
$array array

将被检测的数组

$allStrings boolean

数组键是否必须为所有字符串 以便数组被视为关联的。

return boolean

返回数组是否是关联数组

isIn() 公共 静态 方法 (自版本 2.0.7 可用)

检查是否为数组或 Traversable 包含一个元素。

这个方法与 PHP 函数 in_array() 相同 但它还适用于实现 Traversable 接口。

参见 http://php.net/manual/en/function.in-array.php.

public static boolean isIn($needle, $haystack, $strict false)
$needle mixed

寻找的值。

$haystack array|Traversable

要寻找的值。

$strict boolean

是否启用 (===) 比较。

return boolean

如果 $needle 存在于 $haystack 中返回 true,否则将返回 false

throws yii\base\InvalidArgumentException

如果 $haystack 不能遍历也不是数组则返回异常。

isIndexed() 公共 静态 方法

返回一个值,该值指示给定数组是否是索引数组。

如果一个数组的所有键都是整数,那么该数组是索引数组。如果变量 $consecutive 设置为真, 那么数组键必须是从 0 开始的连续序列。

注意,空数组将被认为是索引的。

public static boolean isIndexed($array, $consecutive false)
$array array

将被检测的数组

$consecutive boolean

数组键是否必须是连续序列 以便数组是不是索引数组。

return boolean

是否为索引数组

isSubset() 公共 静态 方法 (自版本 2.0.7 可用)

检测是否为一个数组或者 Traversable 是另一个数组的子集还是 Traversable

这个方法将返回 true,如果 $needles 所有的元素都包含在 $haystack。 如果至少缺少一个元素的话,将被返回 false

public static boolean isSubset($needles, $haystack, $strict false)
$needles array|Traversable

这个值必须 all$haystack 存在。

$haystack array|Traversable

要搜索的值。

$strict boolean

是否启用 (===) 比较。

return boolean

如果 $needles 存在于 $haystack 返回 true,否则返回 false

throws yii\base\InvalidArgumentException

如果 $haystack 或者 $needles 既不能遍历也不是数组。

isTraversable() 公共 静态 方法 (自版本 2.0.8 可用)

检查变量是数组还是 Traversable

该方法与 PHP 函数 is_array() 相同, 但是,它还可以用于实现 Traversable 接口。

参见 http://php.net/manual/en/function.is-array.php.

public static boolean isTraversable($var)
$var mixed

被评估的变量。

return boolean

变量 $var 是否是一个数组

keyExists() 公共 静态 方法

检查给定数组是否包含指定键。 此方法通过支持不区分大小写键的比较增强了 array_key_exists() 函数。

public static boolean keyExists($key, $array, $caseSensitive true)
$key string

检测的键名

$array array

需要检查键的数组

$caseSensitive boolean

键的比较是否支持区分大小写

return boolean

数组是否包含指定的键

map() 公共 静态 方法

从多维数组当中或者对象数组(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
merge() 公共 静态 方法

递归合并 2 个及以上的数组。 如果每个数组元素有相同的字符串键值对, 后者将会覆盖前者(不同于 array_merge_recursive)。 如果两个数组都有数组类型的元素并且具有相同的键, 那么将进行递归合并。 对于整型键类型元素,后面数组中的元素将 会被追加到前面的数组中去。 你能够使用 yii\helpers\UnsetArrayValue 对象从之前的数组中设置值或者 yii\helpers\ReplaceArrayValue 强制替换原先的值来替代递归数组合并。

public static array merge($a, $b)
$a array

需要合并的数组

$b array

需要合并的数组。你能够指定额外的 数组中的第三个参数,第四个参数等。

return array

合并之后的数组(不改变原始数组。)

multisort() 公共 静态 方法

按一个或多个键对对象数组或者数组(具有相同结构)进行排序。

public static void multisort(&$array, $key, $direction SORT_ASC, $sortFlag SORT_REGULAR)
$array array

要排序的数组。调用此方法后数组将被修改。

$key string|Closure|array

按 key(s) 进行排序。 引用子数组的键名元素,对象的属性名,或一个匿名函数返回用于比较的值。 匿名函数的签名应该是这样的:function($item)。 要按多维键排序,需提供数组中的键。

$direction integer|array

排序方向。它可以按照 SORT_ASC 或者 SORT_DESC 来排序。 当按照不同排序方向的多个键排序时,使用数组进行排序。

$sortFlag integer|array

PHP 排序标记。包括有效的值 SORT_REGULARSORT_NUMERICSORT_STRINGSORT_LOCALE_STRINGSORT_NATURALSORT_FLAG_CASE。 请参考 PHP manual 获取更多详细信息。按具有不同排序标志的多个键排序时,使用数组中的标记排序。

throws yii\base\InvalidArgumentException

如果 $direction 或者 $sortFlag 参数的个数 与 $key 参数的个数不一致。

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 mixed|null remove(&$array, $key, $default null)
$array array

要从中提取值得数组

$key string

数组元素的键名

$default mixed

如果指定的键不存在则返回默认值

return mixed|null

如果找到该元素的值,否则为默认值

removeValue() 公共 静态 方法 (自版本 2.0.11 可用)

从数组中移除对应的值并返回移除的项。

比如,

$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

返回从数组中移除的项

setValue() 公共 静态 方法 (自版本 2.0.13 可用)

在指定键的路径上将值写入关联数组。 如果没有这样的关键路径,它将通过递归创建。 如果键存在,就会被覆盖。

 $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

你想将值写入到 $array 中的路径 它的组成可以是将每个路径的描述用圆点连起来 也可以用数组中的键来描述路径 如果路径为空 $array 则被分配给 $value

$value mixed

被写入的值

toArray() 公共 静态 方法

将对象或者对象数组转换成数组。

public static array toArray($object, $properties = [], $recursive true)
$object object|array|string

要转成数组的对象

$properties array

从对象类的名称到需要将生成的数组结果集放入到属性中的映射。 每个类的属性集合指定一个以下格式的数组:

[
    'app\models\Post' => [
        'id',
        'title',
        // the key name in array result => property name
        'createTime' => 'created_at',
        // the key name in array result => anonymous function
        'length' => function ($post) {
            return strlen($post->content);
        },
    ],
]

ArrayHelper::toArray($post, $properties) 调用此方法生成的数组集合可能如下:

[
    'id' => 123,
    'title' => 'test',
    'createTime' => '2013-01-01 12:00AM',
    'length' => 301,
]
$recursive boolean

是否使用递归的方式将对象的属性转换为数组。

return array

这种对象的数组表示