Laravel: Хелперы массива которые нужно знать

Источник: «Laravel Array Helpers Every Developer Should Know About»
Laravel известен своей элегантностью, простотой и выразительностью. Одной из самых мощных возможностей Laravel являются хелперы. Хелперы массивов Laravel — важный инструмент для разработчиков, работающих с массивами данных.

В этой статье будут рассмотрены некоторые хелперы массива Laravel, которые должен знать каждый разработчик. Эти хелперы могут сэкономить время и сделать работу с массивами более управляемой. Мы рассмотрим join(), keyBy(), get(), first(), last() и pluck(). Итак, давайте погрузимся и посмотрим, что могут предложить хелперы Laravel!

Объединение массива join()

Вы можете подумать Зачем нужен этот хелпер, если я могу использовать join() или implode()?

use Illuminate\Support\Arr;

$stack = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];

Arr::join($stack, ', ');
// Tailwind, Alpine, Laravel, Livewire

implode($stack, ', ');
// Tailwind, Alpine, Laravel, Livewire

Вышеупомянутые функции работают одинаково, поэтому я оставлю вам решение, как стиль предпочтительнее.

Хелпер join() действительно пригодиться, ели вы хотите, чтобы последнее значение использовало отдельную строку для присоединения:

use Illuminate\Support\Arr;

$stack = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];

Arr::join($stack, ', ', ', and');
// Tailwind, Alpine, Laravel, and Livewire

Ключевые данные массива

Иногда вы берёте массив (например, несколько продуктов) и выводите данные по заданному атрибуту продукта. Таким образом, вы можете удобно настроить таргетинг данных по заданному ключу.

Возможно, вы бы написали что-то вроде следующего, создав новую переменную и передав в неё данные с помощью ключевого значения:

$array = [
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
];

$keyed = [];

foreach ($array as $value) {
$keyed[$value['product_id']] = $value;
}

/*
[
'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]
*/

Используя метод Arr::keyBy(), вы можете сделать то же самое с помощью одной строки кода:

$keyed = Arr::keyBy($array, 'product_id');

Проверка и получение данных из массива

Мощный метод Arr::get() прост в использовании, но содержит мощную точечную нотацию, которую можно использовать для простого получения вложенных данных:

use Illuminate\Support\Arr;

$data = [
'products' => [
'desk' => [
'name' => 'Oakendesk'
'price' => 599.00,
'description' => 'Solid oak desk built from scratch.'
],
],
];

// 599.00
Arr::get($data, 'products.desk.price');

// Возвращает false
Arr::has($data, 'products.desk.discount');

// Возвращает null
Arr::get($data, 'products.desk.discount');

// Возвращает заданные данные, если не найдено.
Arr::get($data, 'products.desk.discount', ['type' => 'percent', 'value' => 10]);

Получение первого или последнего элемента в массиве

Когда у вас есть массив и вы хотите получить последний элемент, вы можете воспользоваться функцией PHP end():

$array = [100, 200, 300, 110];

end($array);

Однако если массив пуст, вы получите false:

$array = [];
end($array); // false

Используя Laravel хелпер last(), у вас есть несколько вариантов, когда массив пуст:

use Illuminate\Support\Arr;

$array = [];

Arr::last($array); // null

// Укажите значение по умолчанию
Arr::last($array, null, 100); // 100

Использование хелпера Laravel позволяет передавать замыкание вторым аргументом в качестве условия для того, какой элемент должен возвращаться первый или последний, соответственно:

$array = [100, 200, 300, 110];

Arr::last($array, fn ($e) => $e > 110); // 300
Arr::first($array, fn ($e) => $e > 110); // 200

Простой, но мощный API для многих ситуаций, в которых вы можете столкнуться с получением первого или последнего элемента массива данных.

Извлечение данных из массива

Иногда нужно получить одну скалярную часть данных из набора данных (например, электронных писем от пользователей):

$array = [
['user' => ['id' => 1, 'name' => 'User 1', 'email' => 'user1@example.com']],
['user' => ['id' => 2, 'name' => 'User 2', 'email' => 'user2@example.com']],
];

$emails = [];

foreach ($array as $result) {
$emails[] = $result['user']['email'];
}

/*
[
"user1@example.com",
"user2@example.com",
]
*/

Laravel хелпер Arr::pluck() делает это тривиальным:

Arr::pluck($array, 'user.email');

Узнавайте больше

Надеюсь, вы поняли тему: хелперы заменяют избыточные задачи выразительным синтаксисом. Я считаю, что у них есть несколько других преимуществ. Мы можем использовать дополнительные возможности, предоставляемые некоторыми из этих методов, когда это необходимо (например, условие замыкания в first() и last()), и это позволяет избежать временных переменных и циклов, которые создают ментальные издержки для повторяющихся действий.

Хотя на первый взгляд функции хелперы в любом языке могут показаться излишними из-за использования встроенных функций. Однако я надеюсь, вы видели, насколько мощными они могут сделать лишние вещи, которые потребуются во многих приложениях. Мы только коснулись возможностей доступных в Arr. Иногда нужны простые хелперы для массивов, а иногда понадобятся возможности коллекций.

Если вы ещё новичок в фреймворке Laravel, ознакомьтесь с разделом документации Helpers, чтобы узнать обо всех полезных хелперах по работе со строками и массивами в проектах Laravel. Скорее всего, вас понадобятся эти хелперы и в других проектах, не использующих Laravel!

Дополнительные материалы

Предыдущая Статья

Laravel: Как написать хелпер

Следующая Статья

Laravel: Поговорим о запросах формы / Form Request