Laravel 5: Как использовать метод array_get для доступа к атрибуту с точкой внутри - PullRequest
0 голосов
/ 03 июля 2018

У меня есть такой массив:

$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');

Но ни один из них не работает.

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Вы не можете сделать это с 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 класса Arr ( вендор / 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, который обрабатывает ., он не поддерживает структуру вашего массива.

0 голосов
/ 03 июля 2018

Это довольно просто, основываясь на вашем примере:

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

array_get($data, "x")['a.b'] //gives you the right value

Вы на самом деле не должны использовать array_get для массива, как это все же. А также почему вы используете такое имя для индекса массива.

0 голосов
/ 03 июля 2018
`<?php
$data = [
  "x" => [
    "y" => 5,
    "a.b" => 10
  ]
];
echo $data['x']['a.b'];
// get like this
?>`

если вы обращаетесь к БД, используйте псевдонимы, как указано в ссылке ниже атрибут объекта php с точкой в ​​имени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...