除了 PHP 中丰富的数组函数集, Yii 数组助手类提供了额外的静态方法,让你更高效地处理数组。
用原生PHP从一个对象、数组、或者包含这两者的一个复杂数据结构中获取数据是非常繁琐的。 你首先得使用 isset
检查 key 是否存在, 然后如果存在你就获取它,如果不存在, 则提供一个默认返回值:
class User
{
public $name = 'Alex';
}
$array = [
'foo' => [
'bar' => new User(),
]
];
$value = isset($array['foo']['bar']->name) ? $array['foo']['bar']->name : null;
Yii 提供了一个非常方便的方法来做这件事:
$value = ArrayHelper::getValue($array, 'foo.bar.name');
方法的第一个参数是我们从哪里获取值。第二个参数指定了如何获取数据, 它可以是下述几种类型中的一个:
回调函数如下例所示:
$fullName = ArrayHelper::getValue($user, function ($user, $defaultValue) {
return $user->firstName . ' ' . $user->lastName;
});
第三个可选的参数如果没有给定值,则默认为 null
,如下例所示:
$username = ArrayHelper::getValue($comment, 'user.username', 'Unknown');
$array = [
'key' => [
'in' => ['k' => 'value']
]
];
ArrayHelper::setValue($array, 'key.in', ['arr' => 'val']);
// 在 `$array` 中写入值的路径可以被指定为一个数组
ArrayHelper::setValue($array, ['key', 'in'], ['arr' => 'val']);
结果,$array['key']['in']
的初始值将被新值覆盖
[
'key' => [
'in' => ['arr' => 'val']
]
]
如果路径包含一个不存在的键,它将被创建
// 如果 `$array['key']['in']['arr0']` 不为空,则该值将被添加到数组中
ArrayHelper::setValue($array, 'key.in.arr0.arr1', 'val');
// 如果你想完全覆盖值 `$array['key']['in']['arr0']`
ArrayHelper::setValue($array, 'key.in.arr0', ['arr1' => 'val']);
结果将是
[
'key' => [
'in' => [
'k' => 'value',
'arr0' => ['arr1' => 'val']
]
]
]
作者:老A
来源:嘻吖仔
原文:http://xiaohewan.com/article/show?id=64
版权声明:本文为作者原创文章,转载请附上文章链接!