Коллекции в Laravel предоставляют действительно классную обёртку для работы с массивами. Каждый разработчик Laravel использовал их не раз, особенно при работе с Eloquent. В этой статье я расскажу вам о 10 полезных методах, которые вы можете использовать для получения максимальной отдачи от Коллекции Laravel.
1. Проверка на дубликаты
Метод duplicates извлекает все повторяющиеся значения коллекции. Полученный массив будет иметь оригинальные ключи.
$collection = collect(['james', 'lisa', 'ryan', 'james', 'brad', 'lisa']); $collection->duplicates(); // [3 => 'james', 5 => 'lisa'];
2. Коллекция в цикле
Можно перебрать коллекцию без использования foreach. Это делается при помощи метода each. У него два параметра, item и key, как у обычного foreach.
$collection->each(function ($item, $key) { // Работаем с элементом });
3. Отладка коллекции
Когда дело доходит до отладки, то очень важно знать что находится в Коллекции. Вместо использования 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).
4. Has
Метод 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
5. Implode
Метод 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
6. Добавление и удаление
Добавление элемента в конец коллекции может быть выполнено с помощью метода 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]
7. Shuffle
Метод shuffle перемешивает элементы коллекции в произвольном порядке.
$collection = collect([1, 2, 3]); $shuffled = $collection->shuffle(); $shuffled->all(); // [3, 1, 2] (random example)
8. Max
Вы можете получить максимальное значение из коллекции, используя метод max. Если коллекция содержит массивы, вы можете передать параметр, чтобы получить максимальное значение определенного ключа.
$max = collect([ ['title' => 'Gift card', 'price' => 50], ['title' => 'Chair', 'price' => 80] ])->max('price'); // 80 $max = collect([1, 2, 3])->max(); // 3
9. Filter
Коллекция может быть отфильтрована с использованием метода 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]
10. Slice
Метод slice возвращает фрагмент коллекции, начиная с индекса, переданного параметром. Полученный массив будет иметь оригинальные ключи.
Обратите внимание, что в приведенном ниже примере передается параметр 2. Это означает, что полученная коллекция будет начинаться с индекса 2, а не с элемента 2.
$collection = collect([1, 2, 3, 4, 5]); $sliced = $collection->slice(2); $sliced->all(); // [3, 4, 5]
Это были десять методов Коллекций, которыми я хотел поделиться с вами.
Автор: Daan
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.