Возвращает значения массива из указанного списка ключей, используя точечную нотацию в Laravel 5

Я использую Laravel 5.6. Мне нужна функция, которая возвращает только указанные пары ключ / значение из данного массива с использованием точечной нотации.

Например:

$array = [
    'name' => [
        'first' => 'John', 
        'last' => 'Smith'
    ], 
    'price' => 100,
    'orders' => 10
];


$slice = someFunc($array, ['name.first', 'price']);

должен вернуться:

[
    'name' => [
        'first' => 'John'
    ],
    'price' => 100,
]

Ближайшая функция, которая делает это, находится в Laravel, которую я могу найти, - это функция array_only:

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

Однако он не поддерживает точечную нотацию (в отличие от некоторых других функций Laravel).

Как я могу этого добиться?

А как насчет array_get?

u_mulder 20.03.2018 17:29

Вы можете комбинировать array_dot и array_only, например: array_only(array_dot($array), ['name.first', 'price']);, и если вам нужно, чтобы это была одна функция, вы можете добавить свой собственный помощник, который обертывает эти две функции.

sam 20.03.2018 17:32

Пробовал $array = collect($array); $array->get('name.first');, но он мне приходит null.

Anwar 20.03.2018 17:41

попробуйте это packagist.org/packages/adbario/php-dot-notation

Supun Praneeth 20.03.2018 19:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
461
1

Ответы 1

Есть два варианта, которые вы могли бы использовать сразу же. Первый - использовать array_dot для сглаживания многомерного массива в одномерный массив с точечной записью:

$flattened = array_dot([
    'name' => [
        'first' => 'John', 
        'last' => 'Smith'
    ], 
    'price' => 100,
    'orders' => 10
]);

Это даст следующий результат:

[
    'name.first' => 'John',
    'name.last' => 'Smith',
    'price' => 100,
    'orders' => 10,
]

Оттуда вы можете получить все, кроме заказов, используя array_except($flattened, 'orders'). Конечно, результирующий массив по-прежнему будет в точечной нотации, что может не подойти вам.

Второй вариант, о котором я могу думать, - это объединение нескольких вызовов к array_get, поскольку он поддерживает точечную нотацию.

К сожалению, первый вариант, как вы сказали, помещает все в точечную нотацию. Хотелось бы, чтобы он был в таком же формате.

Yahya Uddin 20.03.2018 17:42

Взгляните на это: stackoverflow.com/questions/9635968/…

samrap 20.03.2018 17:53

Другие вопросы по теме