Коллекции в Laravel предоставляют действительно классную обёртку для работы с массивами. Каждый разработчик Laravel использовал их не раз, особенно при работе с Eloquent. В этой статье я расскажу вам о 10 полезных методах, которые вы можете использовать для получения максимальной отдачи от Коллекции Laravel.
Метод duplicates извлекает все повторяющиеся значения коллекции. Полученный массив будет иметь оригинальные ключи.
$collection = collect(['james', 'lisa', 'ryan', 'james', 'brad', 'lisa']);
$collection->duplicates(); // [3 => 'james', 5 => 'lisa'];
Можно перебрать коллекцию без использования foreach. Это делается при помощи метода each. У него два параметра, item и key, как у обычного foreach.
$collection->each(function ($item, $key) {
// Работаем с элементом
});
Когда дело доходит до отладки, то очень важно знать что находится в Коллекции. Вместо использования dump($collection), класс Collection имеет свой собственный метод dump, который выводит данные гораздо чище.
$collection = collect(['james', 'lisa', 'ryan']);
$collection->dump();
/*
Collection {
#items: array:3 [
0 => "james"
1 => "lisa"
2 => "ryan"
]
}
*/
Если вы хотите, чтобы скрипт завершал работу после дампа коллекции, вы можете просто использовать на коллекции метод dd (dump and die).
Метод has можно использовать для проверки наличия ключа в коллекции. Вы можете передать строку или массив в качестве параметра. Если массив передается как параметр, все значения этого массива должны существовать как ключи в коллекции.
$collection = collect([
'title' => 'Harry Potter',
'author' => 'J.K. Rowling',
'price' => 25
]);
$collection->has('author'); // true
$collection->has(['title', 'price']); // true
$collection->has(['price', 'rating']); // false
Метод implode позволяет объединять элементы коллекции. Это работает точно так же, как и PHP-шная функция implode.
$collection = collect([
['title' => 'Gift card', 'price' => 50],
['title' => 'Chair', 'price' => 80],
]);
$collection->implode('title', ', ');
// Gift card, Chair
Если коллекция содержит только строки или числа, вам нужно передать только аргумент glue.
$collection = collect([1,2,'foo',3,'bar']);
$collection->implode('-');
// 1-2-foo-3-bar
Добавление элемента в конец коллекции может быть выполнено с помощью метода push. Если вы хотите добавить элемент в начало коллекции,
$collection = collect([1, 2, 3]);
$collection->push(4);
$collection->all(); // [1, 2, 3, 4]
Метод pull удаляет и возвращает элемент из коллекции по его ключу.
$collection = collect([
'title' => 'Harry Potter',
'author' => 'J.K. Rowling',
'price' => 25
]);
$collection->pull('author'); // 'J.K. Rowling'
$collection->all(); // ['title' => 'Harry Potter', 'price' => 25]
Метод shuffle перемешивает элементы коллекции в произвольном порядке.
$collection = collect([1, 2, 3]);
$shuffled = $collection->shuffle();
$shuffled->all(); // [3, 1, 2] (random example)
Вы можете получить максимальное значение из коллекции, используя метод max. Если коллекция содержит массивы, вы можете передать параметр, чтобы получить максимальное значение определенного ключа.
$max = collect([
['title' => 'Gift card', 'price' => 50],
['title' => 'Chair', 'price' => 80]
])->max('price'); // 80
$max = collect([1, 2, 3])->max(); // 3
Коллекция может быть отфильтрована с использованием метода filter, использующего обратный вызов. Только элементы, прошедшие данную проверку, останутся в коллекции.
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$even_numbers = $collection->filter(function ($value, $key) {
return $value % 2 == 0;
});
$even_numbers->all(); // [2, 4, 6, 8, 10]
Метод slice возвращает фрагмент коллекции, начиная с индекса, переданного параметром. Полученный массив будет иметь оригинальные ключи.
Обратите внимание, что в приведенном ниже примере передается параметр 2. Это означает, что полученная коллекция будет начинаться с индекса 2, а не с элемента 2.
$collection = collect([1, 2, 3, 4, 5]);
$sliced = $collection->slice(2);
$sliced->all(); // [3, 4, 5]
Это были десять методов Коллекций, которыми я хотел поделиться с вами.