数组助手类(ArrayHelper)

  老A   2019-12-19 15:40:11  0  1237  
关注 喜欢 鲜花 收藏 评论

除了 PHP 中丰富的数组函数集, Yii 数组助手类提供了额外的静态方法,让你更高效地处理数组。

获取值(Getting Values)1

用原生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');

设定值(Setting values)

$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
版权声明:本文为作者原创文章,转载请附上文章链接!
文章不允许评论