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!