首页 > 解决方案 > Laravel 5:如何使用 array_get 方法访问带有点的属性

问题描述

我有一个这样的数组:

$data = [
  "x" => [
    "y" => 5,
    "a.b" => 10
  ]
]

我可以x.y这样访问:

array_get($data, 'x.y');

但是,我怎样才能访问x.(a.b)(有时写为x.a->b

我尝试了以下方法:

array_get($data, 'x.a.b');
array_get($data, 'x.a->b');

但似乎两者都不起作用。

标签: laravellaravel-5laravel-5.6

解决方案


你不能用array_get. 如果你看一下函数(vendor/laravel/framework/src/Illuminate/Support/helpers.php:155):

function array_get($array, $key, $default = null)
{
    return Arr::get($array, $key, $default);
}

它调用类的 get 函数Arrvendor/laravel/framework/src/Illuminate/Support/Arr.php:278):

public static function get($array, $key, $default = null)
{
    if (! static::accessible($array)) {
        return value($default);
    }

    if (is_null($key)) {
        return $array;
    }

    if (static::exists($array, $key)) {
        return $array[$key];
    }

    if (strpos($key, '.') === false) {
        return $array[$key] ?? value($default);
    }

    foreach (explode('.', $key) as $segment) {
        if (static::accessible($array) && static::exists($array, $segment)) {
            $array = $array[$segment];
        } else {
            return value($default);
        }
    }

    return $array;
}

如果您查看处理 的 foreach 循环.,它不支持您的数组具有的结构。


推荐阅读