1 位关注者

类 yii\helpers\ArrayHelper

继承关系yii\helpers\ArrayHelper » yii\helpers\BaseArrayHelper
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/helpers/ArrayHelper.php

ArrayHelper 提供了您可以在应用程序中使用的其他数组功能。

有关 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() 检查给定数组是否包含指定的键。 yii\helpers\BaseArrayHelper
map() 从多维数组或对象数组构建映射(键值对)。 yii\helpers\BaseArrayHelper
merge() 将两个或多个数组递归合并为一个。 yii\helpers\BaseArrayHelper
multisort() 根据一个或多个键对对象或数组(具有相同结构)的数组进行排序。 yii\helpers\BaseArrayHelper
recursiveSort() 递归排序数组。 yii\helpers\BaseArrayHelper
remove() 从数组中删除一个项目并返回该值。如果键在数组中不存在,则改为返回默认值。 yii\helpers\BaseArrayHelper
removeValue() 从数组中删除具有匹配值的项目并返回已删除的项目。 yii\helpers\BaseArrayHelper
setValue() 将值写入指定键路径处的关联数组。 yii\helpers\BaseArrayHelper
toArray() 将对象或对象数组转换为数组。 yii\helpers\BaseArrayHelper

方法详情

隐藏继承的方法

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

定义于: 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 可迭代对象

定义应保留或从结果中删除的数组键的规则。每个规则是

  • var - $array['var'] 将保留在结果中。
  • var.key = 只有 `$array['var']['key'] 将保留在结果中。
  • !var.key = `$array['var']['key'] 将从结果中删除。
返回值 数组

已过滤的数组

                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;
}

            
getColumn() 公共静态方法

定义于: 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;
}

            
getValue() 公共静态方法

定义于: 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

数组元素的键名、键的数组或对象的属性名,或返回值的匿名函数。匿名函数签名应为:function($array, $defaultValue)。自版本 2.0.4 起可以使用传递键数组的可能性。

$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;
}

            
htmlDecode() 公共静态方法

定义于: yii\helpers\BaseArrayHelper::htmlDecode()

将字符串数组中的 HTML 实体解码为相应的字符。

默认情况下,只解码数组值。如果值为数组,此方法也会递归解码它。仅解码字符串值。

另请参阅 https://php.ac.cn/manual/en/function.htmlspecialchars-decode.php

public static 数组 htmlDecode ( $data, $valuesOnly true )
$data 数组

要解码的数据

$valuesOnly 布尔值

是否仅解码数组值。如果为 false,则数组键和数组值都将被解码。

返回值 数组

解码后的数据

                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;
}

            
htmlEncode() 公共静态方法

定义于: 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;
}

            
index() 公共静态方法

定义于: 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 字符串|字符串[]|闭包[]|

键数组,将用于按一个或多个键对输入数组进行分组。如果特定元素的 $key 属性或其值为空,并且未定义 $groups,则将丢弃数组元素。否则,如果指定了 $groups,则数组元素将被添加到结果数组中,不带任何键。此参数自版本 2.0.8 起可用。

返回值 数组

已索引和/或分组的数组

                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;
}

            
isAssociative() 公共静态方法

定义于: 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;
}

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

定义于: yii\helpers\BaseArrayHelper::isIn()

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

此方法与 PHP 函数 in_array() 执行相同的操作,但此外还可以用于实现 Traversable 接口的对象。

另请参阅 https://php.ac.cn/manual/en/function.in-array.php

public static 布尔值 isIn ( $needle, $haystack, $strict false )
$needle 混合类型

要查找的值。

$haystack 可迭代对象

要搜索的值集。

$strict 布尔值

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

返回值 布尔值

如果 $needle$haystack 中找到,则为 true,否则为 false

抛出 yii\base\InvalidArgumentException

如果 $haystack 既不是可遍历的也不是数组。

                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;
}

            
isIndexed() 公共静态方法

定义于: 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;
}

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

定义于: yii\helpers\BaseArrayHelper::isSubset()

检查数组或Traversable是否为另一个数组或Traversable的子集。

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

public static 布尔值 isSubset ( $needles, $haystack, $strict false )
$needles 可迭代对象

必须全部$haystack 中的值。

$haystack 可迭代对象

要搜索的值集。

$strict 布尔值

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

返回值 布尔值

如果 $needles$haystack 的子集,则为 true,否则为 false

抛出 yii\base\InvalidArgumentException

如果 $haystack$needles 既不是可遍历的也不是数组。

                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;
}

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

定义于: yii\helpers\BaseArrayHelper::isTraversable()

检查变量是否为数组或Traversable

此方法与 PHP 函数 is_array() 的功能相同,但额外支持实现 Traversable 接口的对象。

另请参见 https://php.ac.cn/manual/en/function.is-array.php

public static 布尔型 isTraversable ( $var )
$var 混合类型

要评估的变量。

返回值 布尔值

$var 是否可以通过 foreach 遍历

                public static function isTraversable($var)
{
    return is_array($var) || $var instanceof Traversable;
}

            
keyExists() 公共静态方法

定义于: 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;
}

            
map() 公共静态方法

定义于: 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;
}

            
merge() 公共静态方法

定义于: 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;
}

            
multisort() 公共静态方法

定义于: yii\helpers\BaseArrayHelper::multisort()

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

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

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

$key string|Closure|array

要按其排序的键。这指的是子数组元素的键名、对象的属性名或返回用于比较目的的值的匿名函数。匿名函数签名应为:function($item)。要按多个键排序,请在此处提供一个键数组。

$direction 整数|数组

排序方向。它可以是 SORT_ASCSORT_DESC。当按多个键进行排序且排序方向不同时,请使用排序方向数组。

$sortFlag 整数|数组

PHP 排序标志。有效值包括 SORT_REGULARSORT_NUMERICSORT_STRINGSORT_LOCALE_STRINGSORT_NATURALSORT_FLAG_CASE。有关更多详细信息,请参阅 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);
}

            
recursiveSort() 公共静态方法

定义于: 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;
}

            
remove() 公共静态方法

定义于: 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;
}

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

定义于: 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;
}

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

定义于: 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 字符串|数组|

要向 $array 中写入值的路径,当每个键都应由一个点分隔时,可以通过字符串来描述路径,您也可以将路径描述为键数组,如果路径为空,则 $array 将被分配 $value

$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;
}

            
toArray() 公共静态方法

定义于: yii\helpers\BaseArrayHelper::toArray()

将对象或对象数组转换为数组。

public static 数组 toArray ( $object, $properties = [], $recursive true )
$object 对象|数组|字符串

要转换为数组的对象

$properties 数组

一个从对象类名到需要放入结果数组的属性的映射。为每个类指定的属性是一个以下格式的数组

[
    '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 布尔值

是否递归地将作为对象的属性转换为数组。

返回值 数组

对象的数组表示形式

                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];
}