Laravel array_only с точечной нотацией - PullRequest
0 голосов
/ 06 сентября 2018

У Laravel есть помощник, который позволяет вам получать только те ключи, которые вы хотите, вот так:

https://laravel.com/docs/5.6/helpers#method-array-only

$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];

$slice = array_only($array, ['name', 'price']);

// ['name' => 'Desk', 'price' => 100]

Однако, как я могу получить array_only эквивалент, который также допускает точечную запись. например, * +1008 *

$array = [
    'name' => [
        'first' => 'John',
        'last' => 'Smith',
    ],
    'levels' => [
        'maths' => 6,
        'science' => 10,
    ],
    'age' => 25,
];

$slice = array_dot_only($array, ['name.first', 'levels']);

/*
[
    'name' => [
        'first' => 'John',
    ],
    'levels' => [
        'maths' => 6,
        'science' => 10,
    ],
];
*/

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вот небольшая модификация ответа @ Девона:

function array_dot_only(array $array, $keys): array
{
    $newArray = [];
    foreach ((array)$keys as $key) {
        $value = array_get($array, $key);
        if (isset($value)) {
            array_set($newArray, $key, $value);
        }
    }
    return $newArray;
}

Это изменение сделает его поведение более выровненным с array_only(), потому что array_only() не будет вставлять поля, которые не существуют в источнике $array.

0 голосов
/ 06 сентября 2018

Laravel облегчает эту задачу с помощью уже существующих помощников array_set и array_get, которые поддерживают точечную запись.

function array_dot_only($array, $keys) {
    $newArray = [];
    foreach((array) $keys as $key) {
        array_set($newArray, $key, array_get($array, $key));
    }
    return $newArray;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...