Builder

Коллекции

Коллекции - это набор инструментов для работы с массивами и коллекциями данных.
Коллекции позволяет работать с данными более эффективно и удобно, чем стандартные функции PHP.
Коллекции предоставляет множество методов для работы с коллекциями данных, таких как сортировка, фильтрация, группировка, поиск, преобразование и т.д.
Эти методы позволяют быстро и легко получать нужные данные из больших массивов и коллекций.
Кроме того, коллекции поддерживает цепочку методов, которая позволяет выполнять несколько операций над коллекцией данных одновременно. Это значительно упрощает код и повышает его читаемость.

Преобразование коллекции в массив (all)

Метод all() возвращает заданный массив, представленный коллекцией:
(new Collection([1, 2, 3]))->all();

// [1, 2, 3]

Получение элемента по ключу (get)

Метод get() возвращает нужный элемент по заданному ключу. Если ключ не существует, то возвращается null:
$collection = new Collection(['name' => 'Vantuz', 'cms' => 'motor']);

$value = $collection->get('name');

// Vantuz
Вторым параметром вы можете передать значение по умолчанию:
$collection = new Collection(['name' => 'Vantuz', 'cms' => 'motor']);

$value = $collection->get('foo', 'default-value');

// default-value

Получение первой записи (first)

Метод first() возвращает первый элемент в коллекции, который проходит заданный тест на истинность:
(new Collection([1, 2, 3, 4]))->first(function (int $value, int $key) {
    return $value > 2;
});

// 3
Вы также можете вызвать first() метод без аргументов, чтобы получить первый элемент в коллекции. Если коллекция пуста, то возвращается null:
(new Collection([1, 2, 3, 4]))->first();

// 1

Получение последней записи (last)

Метод last() возвращает последний элемент в коллекции, который проходит заданный тест на истинность:
(new Collection([1, 2, 3, 4]))->last(function (int $value, int $key) {
    return $value < 3;
});

// 2
Вы также можете вызвать last() метод без аргументов, чтобы получить последний элемент в коллекции. Если коллекция пуста, то возвращается null:
(new Collection([1, 2, 3, 4]))->last();

// 4

Удаление и получение записи из коллекции (pull)

Метод pull() удаляет и возвращает элемент из коллекции по его ключу:
$collection = new Collection(['product_id' => 'prod-100', 'name' => 'Desk']);

$collection->pull('name');

// 'Desk'

$collection->all();

// ['product_id' => 'prod-100']

Удаление записи из коллекции (forget)

Метод forget() удаляет элемент из коллекции по его ключу:
$collection = new Collection(['name' => 'Vantuz', 'cms' => 'motor']);

$collection->forget('name');

$collection->all();

// ['cms' => 'motor']

Получение всех ключей коллекции (keys)

Метод keys() возвращает все ключи коллекции:
$collection = new Collection([
  'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
  'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$keys = $collection->keys();

$keys->all();

// ['prod-100', 'prod-200']

Получение всех значений коллекции (values)

Метод values() возвращает новую коллекцию со сброшенными ключами и последовательно пронумерованными индексами:
$collection = new Collection([
  10 => ['product' => 'Desk', 'price' => 200],
  11 => ['product' => 'Desk', 'price' => 200]
]);

$values = $collection->values();

$values->all();

/*[
    0 => ['product' => 'Desk', 'price' => 200],
    1 => ['product' => 'Desk', 'price' => 200],
]*/

Проверка ключа на существование (has)

Метод has() определяет, существует ли заданный ключ в коллекции:
$collection = new Collection(['account_id' => 1, 'product' => 'Desk']);

$collection->has('product');

// true

Проверка значение на существование (contains)

Метод contains() определяет, содержит ли коллекция данный элемент. Вы можете передать методу замыкание contains(), чтобы определить, существует ли в коллекции элемент, соответствующий данному критерию истинности:
$collection = new Collection([1, 2, 3, 4, 5]);

$collection->contains(function (int $value, int $key) {
    return $value > 5;
});

/ false
В качестве альтернативы вы можете передать строку методу contains(), чтобы определить, содержит ли коллекция заданное значение элемента:
$collection = new Collection(['name' => 'Desk', 'price' => 100]);

$collection->contains('Desk');

// true

$collection->contains('New York');

// false
Метод search() ищет в коллекции заданное значение и возвращает его ключ при успешном поиске. Если элемент не найден, то возвращается false.
$collection = new Collection([2, 4, 6, 8]);

$collection->search(4);

// 1
Поиск проводится с помощью «неточного» сравнения, то есть строка с числовым значением будет считаться равной числу с таким же значением. Чтобы использовать строгое сравнение, передайте true вторым параметром метода:
$collection->search('4', true);

// false
В качестве альтернативы вы можете передать собственное замыкание для поиска первого элемента, который проходит указанный тест на истинность:
$collection->search(function ($item, $key) {
    return $item > 5;
});

// 2

Получение количества записей в коллекции (count)

Метод count() возвращает общее количество элементов в коллекции:
$collection = new Collection([1, 2, 3, 4]);

$collection->count();

// 4

Установка значения в коллекции (put)

Метод put() устанавливает заданный ключ и значение в коллекцию:
$collection = new Collection(['product_id' => 1, 'name' => 'Desk']);

$collection->put('price', 100);
$collection->all();

// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]

Добавление записи в коллекцию (push)

Метод push() добавляет элемент в конец коллекции:
$collection = new Collection([1, 2, 3, 4]);

$collection->push(5);
$collection->all();

// [1, 2, 3, 4, 5]

Проверка коллекции на пустоту (isEmpty)

Метод isEmpty() возвращает true, если коллекция пуста. В противном случае вернётся false:
$collection = new Collection([]);
$collection->isEmpty();

// true

Проверка коллекции на заполненность (isNotEmpty)

Метод isNotEmpty() возвращает true, если коллекция не пустая. В противном случае вернётся false:
$collection = new Collection([1, 2, 3]);
$collection->isNotEmpty();

// true

Очистка коллекции (clear)

$collection = new Collection([1, 2, 3]);
$slice = $collection->clear();

// []

Срез коллекции (slice)

Метод slice() возвращает часть коллекции, начиная с заданного индекса:
$collection = new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$slice = $collection->slice(4);
$slice->all();

// [5, 6, 7, 8, 9, 10]
Если вы хотите ограничить размер получаемой части коллекции, передайте желаемый размер вторым параметром в метод:
$slice = $collection->slice(4, 2);
$slice->all();

// [5, 6]

Получение всех записей по ключу (pluck)

Метод pluck() извлекает все значения по заданному ключу:
 $collection = new Collection([
    ['login' => 'Alex', 'name' => 'Саня'],
    ['login' => 'Viktor', 'name' => 'Виктор'],
]);

// ['Саня', 'Виктор']
Также вы можете указать, с каким ключом вы хотите получить коллекцию:
$collection->pluck('name', 'login');
$collection->all();

//['Alex' => 'Саня', 'Viktor' => 'Виктор']

Фильтрация записей (filter)

Метод filter() фильтрует коллекцию, используя callback-функции, eсли callback-функция возвращает true, данное значение возвращается в результирующую коллекцию:
$collection = new Collection([1, 2, 3, 4]);

$filtered = $collection->filter(function (int $value, int $key) {
    return $value > 2;
});

$filtered->all();

// [3, 4]
Если callback-функция не указана все пустые значения массива array будут удалены
$collection = new Collection([1, 2, 3, null, false, '', 0, []]);

$collection->filter()->all();

// [1, 2, 3]