Может войдёшь?
Черновики Написать статью Профиль

Коллекции

перевод документация 5.х

  1. 1. Введение
  2. 2. Создание коллекций
  3. 3. Доступные методы
  4. 4. Список методов
Этот перевод актуален для англоязычной документации на (ветка 5.1) и (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

Класс Illuminate\Support\Collection предоставляет гибкую и удобную обёртку для работы с массивами данных. Например, посмотрите на следующий код. Мы будем использовать вспомогательную функцию PHPcollect(), чтобы создать новый экземпляр коллекции из массива, выполним функцию PHPstrtoupper() для каждого элемента, а затем удалим все пустые элементы:

PHP
$collection collect(['taylor''abigail'null])->map(function ($name) {
  return 
strtoupper($name);
})
->
reject(function ($name) {
  return empty(
$name);
});

Как видите, класс Collection позволяет использовать свои методы в связке для гибкого отображения и уменьшения исходного массива. В общем, каждый метод класса Collection возвращает совершенно новый экземпляр Collection.

Создание коллекций

Как упоминалось выше, вспомогательная функция PHPcollect() возвращает новый экземпляр класса Illuminate\Support\Collection для заданного массива. Поэтому создать коллекцию очень просто:

PHP
$collection collect([123]);

По умолчанию коллекции моделей Eloquent всегда возвращаются как экземпляры класса Collection. Используйте свободно этот класс в любом месте, где это удобно для вашего приложения.

Доступные методы

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

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

all
avg
chunk
collapse
contains
count
diff
each
every
except
filter
first
flatten
flip
forget
forPage
get
groupBy
has
implode
intersect
isEmpty
keyBy
keys
last
map
max
merge
min
only
pluck
pop
prepend
pull
push
put
random
reduce
reject
reverse
search
shift
shuffle
slice
sort
sortBy
sortByDesc
splice
sum
take
toArray
toJson
transform
unique
values
where
whereLoose
zip

Список методов

all()

Метод PHPall() просто возвращает заданный массив, представленный коллекцией:

PHP
collect([123])->all();

// [1, 2, 3]

avg()

Метод PHPavg() возвращает среднее значение всех элементов в коллекции:

PHP
collect([12345])->avg();

// 3

Если коллекция содержит вложенные массивы или объекты, то вы должны передать ключ, чтобы определить, среднее значение каких значений необходимо вычислить:

PHP
$collection collect([
  [
'name' => 'JavaScript: The Good Parts''pages' => 176],
  [
'name' => 'JavaScript: The Definitive Guide''pages' => 1096],
]);

$collection->avg('pages');

// 636

chunk()

Метод PHPchunk() разбивает коллекцию на множество мелких коллекций заданного размера:

PHP
$collection collect([1234567]);

$chunks $collection->chunk(4);

$chunks->toArray();

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

Этот метод особенно полезен в представлениях при работе с системой сеток, такой как Bootstrap. Представьте, что у вас есть коллекция моделей Eloquent, которую вы хотите отобразить в сетке:

PHP
@foreach ($products->chunk(3) as $chunk)
  <
div class="row">
    @foreach (
$chunk as $product)
      <
div class="col-xs-4">{{ $product->name }}</div>
    @endforeach
  </
div>
@endforeach

collapse()

Метод PHPcollapse() сворачивает коллекцию массивов в одномерную коллекцию:

PHP
$collection collect([[123], [456], [789]]);

$collapsed $collection->collapse();

$collapsed->all();

// [1, 2, 3, 4, 5, 6, 7, 8, 9]

contains()

Метод PHPcontains() определяет, содержит ли коллекция заданное значение:

PHP
$collection collect(['name' => 'Desk''price' => 100]);

$collection->contains('Desk');

// true

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

// false

Также вы можете передать пару ключ/значение в метод PHPcontains(), определяющий, существует ли заданная пара в коллекции:

PHP
$collection collect([
  [
'product' => 'Desk''price' => 200],
  [
'product' => 'Chair''price' => 100],
]);

$collection->contains('product''Bookcase');

// false

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

PHP
$collection collect([12345]);

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

// false

count()

Метод PHPcount() возвращает общее количество элементов в коллекции:

PHP
$collection collect([1234]);

$collection->count();

// 4

diff()

Метод PHPdiff() сравнивает одну коллекцию с другой коллекцией или с простым PHP PHParray:

PHP
$collection collect([12345]);

$diff $collection->diff([2468]);

$diff->all();

// [1, 3, 5]

each()

Метод PHPeach() перебирает элементы в коллекции и передает каждый элемент в функцию обратного вызова:

PHP
$collection $collection->each(function ($item$key) {
  
//
});

Верните false из функции обратного вызова, чтобы выйти из цикла:

PHP
$collection $collection->each(function ($item$key) {
  if (
/* ваше условие */) {
    return 
false;
  }
});

every()

Метод PHPevery() создает новую коллекцию, состоящую из каждого n-го элемента:

PHP
$collection collect(['a''b''c''d''e''f']);

$collection->every(4);

// ['a', 'e']

Вы можете дополнительно передать смещение элементов вторым параметром:

PHP
$collection->every(41);

// ['b', 'f']

except()

Метод PHPexcept() возвращает все элементы в коллекции, кроме тех, чьи ключи указаны в передаваемом массиве:

PHP
$collection collect(['product_id' => 1'name' => 'Desk''price' => 100'discount' => false]);

$filtered $collection->except(['price''discount']);

$filtered->all();

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

Метод only — инверсный методу PHPexcept.

filter()

Метод PHPfilter() фильтрует коллекцию с помощью переданной функции обратного вызова, сохраняя только те элементы, которые соответствуют заданному условию:

PHP
$collection collect([1234]);

$filtered $collection->filter(function ($item) {
  return 
$item 2;
});

$filtered->all();

// [3, 4]

Метод reject() — инверсный методу PHPfilter().

first()

Метод PHPfirst() возвращает первый элемент в коллекции, который подходит под заданное условие:

PHP
collect([1234])->first(function ($key$value) {
  return 
$value 2;
});

// 3

Также вы можете вызвать метод PHPfirst() без параметров, чтобы получить первый элемент в коллекции. Если коллекция пуста, то вернётся PHPnull:

PHP
collect([1234])->first();

// 1

flatten()

Метод PHPflatten() преобразует многомерную коллекцию в одномерную:

PHP
$collection collect(['name' => 'taylor''languages' => ['php''javascript']]);

$flattened $collection->flatten();

$flattened->all();

// ['taylor', 'php', 'javascript'];

flip()

Метод PHPflip() меняет местами ключи и значения в коллекции:

PHP
$collection collect(['name' => 'taylor''framework' => 'laravel']);

$flipped $collection->flip();

$flipped->all();

// ['taylor' => 'name', 'laravel' => 'framework']

forget()

Метод PHPforget() удаляет элемент из коллекции по его ключу:

PHP
$collection collect(['name' => 'taylor''framework' => 'laravel']);

$collection->forget('name');

$collection->all();

// [framework' => 'laravel']

В отличие от большинства других методов коллекции, PHPforget() не возвращает новую модифицированную коллекцию. Он изменяет коллекцию при вызове.

forPage()

Метод PHPforPage() возвращает новую коллекцию, содержащую элементы, которые будут присутствовать на странице с заданным номером:

PHP
$collection collect([123456789]);

$chunk $collection->forPage(23);

$chunk->all();

// [4, 5, 6]

Метод принимает номер страницы и количество элементов для отображения на странице.

get()

Метод PHPget() возвращает нужный элемент по заданному ключу. Если ключ не существует, то возвращается PHPnull:

PHP
$collection collect(['name' => 'taylor''framework' => 'laravel']);

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

// taylor

Вторым параметром вы можете передать значение по умолчанию:

PHP
$collection collect(['name' => 'taylor''framework' => 'laravel']);

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

// default-value

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

PHP
$collection->get('email', function () {
  return 
'default-value';
});

// default-value

groupBy()

Метод PHPgroupBy() группирует элементы коллекции по заданному ключу:

PHP
$collection collect([
  [
'account_id' => 'account-x10''product' => 'Chair'],
  [
'account_id' => 'account-x10''product' => 'Bookcase'],
  [
'account_id' => 'account-x11''product' => 'Desk'],
]);

$grouped $collection->groupBy('account_id');

$grouped->toArray();

/*
  [
    'account-x10' => [
      ['account_id' => 'account-x10', 'product' => 'Chair'],
      ['account_id' => 'account-x10', 'product' => 'Bookcase'],
    ],
    'account-x11' => [
      ['account_id' => 'account-x11', 'product' => 'Desk'],
    ],
  ]
*/

В дополнение к передаваемой строке key, вы можете также передать функцию обратного вызова. Она должна возвращать значение, по которому вы хотите группировать:

PHP
$grouped $collection->groupBy(function ($item$key) {
  return 
substr($item['account_id'], -3);
});

$grouped->toArray();

/*
  [
    'x10' => [
      ['account_id' => 'account-x10', 'product' => 'Chair'],
      ['account_id' => 'account-x10', 'product' => 'Bookcase'],
    ],
    'x11' => [
      ['account_id' => 'account-x11', 'product' => 'Desk'],
    ],
  ]
*/

has()

Метод PHPhas() определяет, существует ли заданный ключ в коллекции:

PHP
$collection collect(['account_id' => 1'product' => 'Desk']);

$collection->has('email');

// false

implode()

Метод PHPimplode() соединяет элементы в коллекции. Его параметры зависят от типа элементов в коллекции.

Если коллекция содержит массивы или объекты, вы должны передать ключ атрибутов, значения которых вы хотите соединить, и «промежуточную» строку, которую вы хотите поместить между значениями:

PHP
$collection collect([
  [
'account_id' => 1'product' => 'Desk'],
  [
'account_id' => 2'product' => 'Chair'],
]);

$collection->implode('product'', ');

// Desk, Chair

Если коллекция содержит простые строки или числовые значения, просто передайте только «промежуточный» параметр в метод:

PHP
collect([12345])->implode('-');

// '1-2-3-4-5

intersect()

Метод PHPIntersect() удаляет любые значения, которых нет в заданном PHParray или коллекции:

PHP
$collection collect(['Desk''Sofa''Chair']);

$intersect $collection->intersect(['Desk''Chair''Bookcase']);

$intersect->all();

// [0 => 'Desk', 2 => 'Chair']

Как видите, результирующая коллекция сохранит оригинальные ключи.

isEmpty()

Метод PHPisEmpty() возвращает true, если коллекция пуста. В противном случае вернётся false:

PHP
collect([])->isEmpty();

// true

keyBy()

Возвращает коллекцию по указанному ключу:

PHP
$collection collect([
  [
'product_id' => 'prod-100''name' => 'desk'],
  [
'product_id' => 'prod-200''name' => 'chair'],
]);

$keyed $collection->keyBy('product_id');

$keyed->all();

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

Если несколько элементов имеют одинаковый ключ, то только последний элемент появится в новой коллекции.

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

PHP
$keyed $collection->keyBy(function ($item) {
  return 
strtoupper($item['product_id']);
});

$keyed->all();

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

keys()
Метод PHPkeys() возвращает все ключи коллекции:

PHP
$collection collect([
  
'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']

last()

Метод PHPlast() возвращает последний элемент в коллекции, для которого выполняется заданное условие:

PHP
collect([1234])->last(function ($key$value) {
  return 
$value 3;
});

// 2

Также вы можете вызвать метод PHPlast() без параметров, чтобы получить последний элемент в коллекции. Если коллекция пуста, то вернётся PHPnull:

PHP
collect([1234])->last();

// 4

map()

Метод PHPmap() перебирает коллекцию и передаёт каждое значению в функцию обратного вызова. Функция обратного вызова может свободно изменять элемент и возвращать его, формируя тем самым новую коллекцию измененных элементов:

PHP
$collection collect([12345]);

$multiplied $collection->map(function ($item$key) {
  return 
$item 2;
});

$multiplied->all();

// [2, 4, 6, 8, 10]

Как и большинство других методов коллекции, метод PHPmap() возвращает новый экземпляр коллекции. Он не изменяет коллекцию при вызове. Если вы хотите преобразовать оригинальную коллекцию, используйте метод transform().

max()

Метод PHPmax() возвращает максимальное значение по заданному ключу:

PHP
$max collect([['foo' => 10], ['foo' => 20]])->max('foo');

// 20

$max collect([12345])->max();

// 5

merge()

Метод PHPmerge() добавляет указанный массив в коллекцию. Значения коллекции, имеющие тот же строковый ключ, что и значение в массиве, будут перезаписаны:

PHP
$collection collect(['product_id' => 1'name' => 'Desk']);

$merged $collection->merge(['price' => 100'discount' => false]);

$merged->all();

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

Если заданные ключи в массиве числовые, то значения будут добавляться в конец коллекции:

PHP
$collection collect(['Desk''Chair']);

$merged $collection->merge(['Bookcase''Door']);

$merged->all();

// ['Desk', 'Chair', 'Bookcase', 'Door']

min()

Метод PHPmin() возвращает минимальное значение по заданному ключу:

PHP
$min collect([['foo' => 10], ['foo' => 20]])->min('foo');

// 10

$min collect([12345])->min();

// 1

only()

Метод PHPonly() возвращает элементы коллекции с заданными ключами:

PHP
$collection collect(['product_id' => 1'name' => 'Desk''price' => 100'discount' => false]);

$filtered $collection->only(['product_id''name']);

$filtered->all();

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

Метод except() — инверсный для метода PHPonly().

pluck()

Метод PHPpluck() извлекает все значения коллекции по заданному ключу:

PHP
 $collection collect([
  [
'product_id' => 'prod-100''name' => 'Desk'],
  [
'product_id' => 'prod-200''name' => 'Chair'],
]);

$plucked $collection->pluck('name');

$plucked->all();

// ['Desk', 'Chair']

Также вы можете указать, с каким ключом вы хотите получить коллекцию:

PHP
$plucked $collection->pluck('name''product_id');

$plucked->all();

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

pop()

Метод PHPpop() удаляет и возвращает последний элемент из коллекции:

PHP
$collection collect([12345]);

$collection->pop();

// 5

$collection->all();

// [1, 2, 3, 4]

prepend()

Метод PHPprepend() добавляет элемент в начало коллекции:

PHP
$collection collect([12345]);

$collection->prepend(0);

$collection->all();

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

Вторым параметром вы можете передать ключ добавляемого элемента

PHP
$collection collect(['one' => 1'two', => 2]);

$collection->prepend(0'zero');

$collection->all();

// ['zero' => 0, 'one' => 1, 'two', => 2]

pull()

Метод PHPpull() удаляет и возвращает элемент из коллекции по его ключу:

PHP
$collection collect(['product_id' => 'prod-100''name' => 'Desk']);

$collection->pull('name');

// 'Desk'

$collection->all();

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

push()

Метод PHPpush() добавляет элемент в конец коллекции:

PHP
$collection collect([1234]);

$collection->push(5);

$collection->all();

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

put()

Метод PHPput() устанавливает заданный ключ и значение в коллекцию:

PHP
$collection collect(['product_id' => 1'name' => 'Desk']);

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

$collection->all();

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

random()

Метод PHPrandom() возвращает случайный элемент из коллекции:

PHP
$collection collect([12345]);

$collection->random();

// 4 - (получен в случайном порядке)

Также вы можете передать целое число в PHPrandom(). Если это число больше, чем 1, то возвращается коллекция элементов:

PHP
$random $collection->random(3);

$random->all();

// [2, 4, 5] - (получены в случайном порядке)

reduce()

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

PHP
$collection collect([123]);

$total $collection->reduce(function ($carry$item) {
  return 
$carry $item;
});

// 6

Значение для PHP$carry в первой итерации — null. Тем не менее, вы можете указать его начальное значение во втором параметре метода PHPreduce():

PHP
$collection->reduce(function ($carry$item) {
  return 
$carry $item;
}, 
4);

// 10

reject()

Метод PHPreject() фильтрует коллекцию, используя заданную функцию обратного вызова. Функция обратного вызова должна возвращать true для элементов, которые необходимо удалить из результирующей коллекции:

PHP
$collection collect([1234]);

$filtered $collection->reject(function ($item) {
  return 
$item 2;
});

$filtered->all();

// [1, 2]

Метод filter() — инверсный для метода PHPreject().

reverse()

Метод PHPreverse() меняет порядок элементов коллекции:

PHP
$collection collect([12345]);

$reversed $collection->reverse();

$reversed->all();

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

search()

Метод PHPsearch() ищет в коллекции заданное значение и возвращает его ключ при успешном поиске. Если элемент не найден, то возвращается false.

PHP
$collection collect([2468]);

$collection->search(4);

// 1

Поиск проводится с помощью «неточного» сравнения. Чтобы использовать строгое сравнение, передайте true вторым параметром метода:

PHP
$collection->search('4'true);

// false

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

PHP
$collection->search(function ($item$key) {
  return 
$item 5;
});

// 2

shift()

Метод PHPshift() удаляет и возвращает первый элемент из коллекции:

PHP
$collection collect([12345]);

$collection->shift();

// 1

$collection->all();

// [2, 3, 4, 5]

shuffle()

Метод PHPshuffle() перемешивает элементы в коллекции случайным образом:

PHP
$collection collect([12345]);

$shuffled $collection->shuffle();

$shuffled->all();

// [3, 2, 5, 1, 4] // (generated randomly)

slice()

Метод PHPslice() возвращает часть коллекции, начиная с заданного индекса:

PHP
$collection collect([12345678910]);

$slice $collection->slice(4);

$slice->all();

// [5, 6, 7, 8, 9, 10]

Если вы хотите ограничить размер получаемой части коллекции, передайте желаемый размер вторым параметром в метод:

PHP
$slice $collection->slice(42);

$slice->all();

// [5, 6]

Полученная часть коллекции будет иметь новые числовые проиндексированные ключи. Если вы хотите сохранить оригинальные ключи, передайте true третьим параметром в метод.

sort()

Метод PHPsort() сортирует коллекцию:

PHP
$collection collect([53124]);

$sorted $collection->sort();

$sorted->values()->all();

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

Отсортированная коллекция сохраняет оригинальные ключи массива. В нашем примере мы использовали метод values() для сброса ключей и последовательной нумерации индексов.

Для сортировки коллекции вложенных массивов или объектов, смотрите методы sortBy() и sortByDesc().

Если вам необходимо отсортировать коллекцию с дополнительными условиями, вы можете передать функцию обратного вызова в метод PHPsort() с вашим собственным алгоритмом. Найдите в документации по PHP метод usort, который вызывается внутри метода PHPsort() вашей коллекции.

sortBy()

Метод PHPsortBy() сортирует коллекцию по заданному ключу:

PHP
$collection collect([
  [
'name' => 'Desk''price' => 200],
  [
'name' => 'Chair''price' => 100],
  [
'name' => 'Bookcase''price' => 150],
]);

$sorted $collection->sortBy('price');

$sorted->values()->all();

/*
  [
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
    ['name' => 'Desk', 'price' => 200],
  ]
*/

Отсортированная коллекция сохраняет оригинальные ключи массива. В нашем примере мы использовали метод values() для сброса ключей и последовательной нумерации индексов.

Также вы можете передать свою собственную функцию обратного вызова, чтобы определить, как сортировать значения коллекции:

PHP
$collection collect([
  [
'name' => 'Desk''colors' => ['Black''Mahogany']],
  [
'name' => 'Chair''colors' => ['Black']],
  [
'name' => 'Bookcase''colors' => ['Red''Beige''Brown']],
]);

$sorted $collection->sortBy(function ($product$key) {
  return 
count($product['colors']);
});

$sorted->values()->all();

/*
  [
    ['name' => 'Chair', 'colors' => ['Black']],
    ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
    ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  ]
*/

sortByDesc()

Этот метод использует такую же сигнатуру, что и sortBy(), но будет сортировать коллекцию в обратном порядке.

splice()

Метод PHPsplice() удаляет и возвращает часть элементов, начиная с заданного индекса:

PHP
$collection collect([12345]);

$chunk $collection->splice(2);

$chunk->all();

// [3, 4, 5]

$collection->all();

// [1, 2]

Вы можете передать второй параметр в метод для ограничения размера возвращаемой части коллекции:

PHP
$collection collect([12345]);

$chunk $collection->splice(21);

$chunk->all();

// [3]

$collection->all();

// [1, 2, 4, 5]

Также вы можете передать в метод третий параметр, содержащий новые элементы, чтобы заменить элементы, которые будут удалены из коллекции:

PHP
$collection collect([12345]);

$chunk $collection->splice(21, [1011]);

$chunk->all();

// [3]

$collection->all();

// [1, 2, 10, 11, 4, 5]

sum()

Метод PHPsum() возвращает сумму всех элементов в коллекции:

PHP
collect([12345])->sum();

// 15

Если коллекция содержит вложенные массивы или объекты, вам нужно передать ключ для определения значений, которые нужно суммировать:

PHP
$collection collect([
  [
'name' => 'JavaScript: The Good Parts''pages' => 176],
  [
'name' => 'JavaScript: The Definitive Guide''pages' => 1096],
]);

$collection->sum('pages');

// 1272

Также вы можете передать свою собственную функцию обратного вызова, чтобы определить, какие значения коллекции суммировать:

PHP
$collection collect([
  [
'name' => 'Chair''colors' => ['Black']],
  [
'name' => 'Desk''colors' => ['Black''Mahogany']],
  [
'name' => 'Bookcase''colors' => ['Red''Beige''Brown']],
]);

$collection->sum(function ($product) {
  return 
count($product['colors']);
});

// 6

take()

Метод PHPtake() возвращает новую коллекцию с заданным числом элементов:

PHP
$collection collect([012345]);

$chunk $collection->take(3);

chunk->all();

// [0, 1, 2]

Также вы можете передать отрицательное целое число, чтобы получить определенное количество элементов с конца коллекции:

PHP
$collection collect([012345]);

$chunk $collection->take(-2);

$chunk->all();

// [4, 5]

toArray()

Метод PHPtoArray() преобразует коллекцию в простой PHP PHParray. Если значения коллекции являются моделями Eloquent, то модели также будут преобразованы в массивы:

PHP
$collection collect(['name' => 'Desk''price' => 200]);

$collection->toArray();

/*
  [
    ['name' => 'Desk', 'price' => 200],
  ]
*/

Метод PHPtoArray() также преобразует все вложенные объекты в массив. Если вы хотите получить базовый массив, используйте вместо этого метод all().

toJson()

Метод PHPtoJson() преобразует коллекцию в JSON:

PHP
$collection collect(['name' => 'Desk''price' => 200]);

$collection->toJson();

// '{"name":"Desk","price":200}'

transform()

Метод PHPtransform() перебирает коллекцию и вызывает заданную функцию обратного вызова для каждого элемента коллекции. Элементы коллекции будут заменены на значения, полученный из функции обратного вызова:

PHP
$collection collect([12345]);

$collection->transform(function ($item$key) {
  return 
$item 2;
});

$collection->all();

// [2, 4, 6, 8, 10]

В отличие от большинства других методов коллекции, PHPtransform() изменяет саму коллекцию. Если вместо этого вы хотите создать новую коллекцию, используйте метод map().

unique()

Метод PHPunique() возвращает все уникальные элементы в коллекции:

PHP
$collection collect([1122342]);

$unique $collection->unique();

$unique->values()->all();

// [1, 2, 3, 4]

Полученная коллекция сохраняет оригинальные ключи массива. В нашем примере мы использовали метод values() для сброса ключей и последовательной нумерации индексов.

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

PHP
$collection collect([
  [
'name' => 'iPhone 6''brand' => 'Apple''type' => 'phone'],
  [
'name' => 'iPhone 5''brand' => 'Apple''type' => 'phone'],
  [
'name' => 'Apple Watch''brand' => 'Apple''type' => 'watch'],
  [
'name' => 'Galaxy S6''brand' => 'Samsung''type' => 'phone'],
  [
'name' => 'Galaxy Gear''brand' => 'Samsung''type' => 'watch'],
]);

$unique $collection->unique('brand');

$unique->values()->all();

/*
  [
    ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
  ]
*/

Также вы можете передать свою собственную функцию обратного вызова, чтобы определять уникальность элементов:

PHP
$unique $collection->unique(function ($item) {
  return 
$item['brand'].$item['type'];
});

$unique->values()->all();

/*
  [
    ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
    ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
  ]
*/

values()

Метод PHPvalues() возвращает новую коллекцию со сброшенными ключами и последовательно пронумерованными индексами:

PHP
$collection collect([
  
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],
  ]
*/

where()

Метод PHPwhere() фильтрует коллекцию по заданной паре ключ/значение:

PHP
$collection collect([
  [
'product' => 'Desk''price' => 200],
  [
'product' => 'Chair''price' => 100],
  [
'product' => 'Bookcase''price' => 150],
  [
'product' => 'Door''price' => 100],
]);

$filtered $collection->where('price'100);

$filtered->all();

/*
[
  ['product' => 'Chair', 'price' => 100],
  ['product' => 'Door', 'price' => 100],
]
*/

Метод PHPwhere() использует строгое сравнение при проверке значений элементов. Используйте метод whereLoose() для фильтрации с использованием «неточного» сравнения.

whereLoose()

Этот метод имеет такую же сигнатуру, что и метод PHPwhere(). Однако, все значения сравниваются с использованием «неточного» сравнения.

zip()

Метод PHPzip() объединяет все значения заданного массива со значениями коллекции на соответствующем индексе:

PHP
$collection collect(['Chair''Desk']);

$zipped $collection->zip([100200]);

$zipped->all();

// [['Chair', 100], ['Desk', 200]]

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.