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

Коллекции

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

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

immutable

Введение

Класс 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
combine
contains
count
diff
diffKeys
each
every
except
filter
first
flatMap
flatten
flip
forget
forPage
get
groupBy
has
implode
intersect
isEmpty
keyBy
keys
last
map
mapWithKeys
max
merge
min
only
pipe
pluck
pop
prepend
pull
push
put
random
reduce
reject
reverse
search
shift
shuffle
slice
sort
sortBy
sortByDesc
splice
split
sum
take
toArray
toJson
transform
union
unique
values
where
whereStrict
whereLoose
whereIn
whereInStrict
whereInLoose
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]
+ 5.2

добавлено в 5.2 ()

combine()

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

PHP
$collection collect(['name''age']);

$combined $collection->combine(['George'29]);

$combined->all();

// ['name' => 'George', 'age' => 29]

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 ($value$key) {
  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]
+ 5.3 5.2

добавлено в 5.3 () 5.2 ()

diffKeys()

Метод PHPdiffKeys() сравнивает одну коллекцию с другой коллекцией или с простым PHP PHParray на основе их ключей. Этот метод вернёт те пары ключ/значение из исходной коллекции, которых нет в переданной для сравнения коллекции:

PHP
$collection collect([
  
'one' => 10,
  
'two' => 20,
  
'three' => 30,
  
'four' => 40,
  
'five' => 50,
]);

$diff $collection->diffKeys([
  
'two' => 2,
  
'four' => 4,
  
'six' => 6,
  
'eight' => 8,
]);

$diff->all();

// ['one' => 10, 'three' => 30, 'five' => 50]

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'price' => 100'discount' => false]);

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

$filtered->all();

// ['product_id' => 1]

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

filter()

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

+ 5.2

добавлено в 5.2 ()

PHP
$collection collect([1234]);

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

$filtered->all();

// [3, 4]
+ 5.1 5.0

добавлено в 5.1 () 5.0 ()

PHP
$collection collect([1234]);

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

$filtered->all();

// [3, 4]
+ 5.3

добавлено в 5.3 ()

Если функция обратного вызова не указана, будут удалены все элементы коллекции, эквивалентные PHPfalse:

PHP
$collection collect([123nullfalse''0, []]);

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

// [1, 2, 3]

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

first()

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

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

// 3

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

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

// 1
+ 5.3 5.2

добавлено в 5.3 () 5.2 ()

flatMap()

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

PHP
$collection collect([
  [
'name' => 'Sally'],
  [
'school' => 'Arkansas'],
  [
'age' => 28]
]);

$flattened $collection->flatMap(function ($values) {
  return 
array_map('strtoupper'$values);
});

$flattened->all();

// ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];

flatten()

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

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

$flattened $collection->flatten();

$flattened->all();

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

добавлено в 5.2 ()

При необходимости вы можете передать в метод аргумент «глубины»:

PHP
$collection collect([
  
'Apple' => [
    [
'name' => 'iPhone 6S''brand' => 'Apple'],
  ],
  
'Samsung' => [
    [
'name' => 'Galaxy S7''brand' => 'Samsung']
  ],
]);

$products $collection->flatten(1);

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

/*
  [
    ['name' => 'iPhone 6S', 'brand' => 'Apple'],
    ['name' => 'Galaxy S7', 'brand' => 'Samsung'],
  ]
*/

Если вызвать PHPflatten() без указания глубины, то вложенные массивы тоже «расплющатся», и получим ['iPhone 6S', 'Apple', 'Galaxy S7', 'Samsung']. Глубина задаёт уровень вложенности массивов, ниже которого «расплющивать» не нужно.

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('product');

// true

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() удаляет любые значения из исходной коллекции, которых нет в переданном массиве или коллекции. Результирующая коллекция сохранит ключи оригинальной коллекции:

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()

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

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 ($value$key) {
  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().

+ 5.3

добавлено в 5.3 ()

mapWithKeys()

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

PHP
$collection collect([
  [
    
'name' => 'John',
    
'department' => 'Sales',
    
'email' => 'john@example.com'
  
],
  [
    
'name' => 'Jane',
    
'department' => 'Marketing',
    
'email' => 'jane@example.com'
  
]
]);

$keyed $collection->mapWithKeys(function ($item) {
  return [
$item['email'] => $item['name']];
});

$keyed->all();

/*
  [
    'john@example.com' => 'John',
    'jane@example.com' => 'Jane',
  ]
*/

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'price' => 100]);

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

$merged->all();

// ['product_id' => 1, 'price' => 200, '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().

+ 5.3

добавлено в 5.3 ()

pipe()

Метод PHPpipe() передаёт коллекцию в функцию замыкание и возвращает результат:

PHP
$collection collect([123]);

$piped $collection->pipe(function ($collection) {
  return 
$collection->sum();
});

// 6

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 для элементов, которые необходимо удалить из результирующей коллекции:

+ 5.2

добавлено в 5.2 ()

PHP
$collection collect([1234]);

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

$filtered->all();

// [1, 2]
+ 5.1 5.0

добавлено в 5.1 () 5.0 ()

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]
+ 5.2

добавлено в 5.2 ()

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

+ 5.1 5.0

добавлено в 5.1 () 5.0 ()

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

sort()

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

PHP
$collection collect([53124]);

$sorted $collection->sort();

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

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

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

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

sortBy()

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

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],
  ]
*/

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

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]
+ 5.3

добавлено в 5.3 ()

split()

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

PHP
$collection collect([12345]);

$groups $collection->split(3);

$groups->toArray();

// [[1, 2], [3, 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().

+ 5.3 5.2

добавлено в 5.3 () 5.2 ()

union()

Метод PHPunion() добавляет данный массив в коллекцию. Если массив содержит ключи, которые уже есть в исходной коллекции, то будут оставлены значения исходной коллекции:

PHP
$collection collect([=> ['a'], => ['b']]);

$union $collection->union([=> ['c'], => ['b']]);

$union->all();

// [1 => ['a'], 2 => ['b'], [3 => ['c']]

unique()

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

PHP
$collection collect([1122342]);

$unique $collection->unique();

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

// [1, 2, 3, 4]

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

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],
]
*/
+ 5.3

добавлено в 5.3 ()

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

whereStrict()

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

+ 5.2 5.1 5.0

добавлено в 5.2 () 5.1 () 5.0 ()

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

whereLoose()

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

+ 5.3 5.2

добавлено в 5.3 () 5.2 ()

whereIn()

Метод PHPwhereIn() фильтрует коллекцию по заданным ключу/значению, содержащимся в данном массиве.

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

$filtered $collection->whereIn('price', [150200]);

$filtered->all();

/*
[
  ['product' => 'Bookcase', 'price' => 150],
  ['product' => 'Desk', 'price' => 200],
]
*/
+ 5.3

добавлено в 5.3 ()

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

whereInStrict()

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

+ 5.2

добавлено в 5.2 ()

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

whereInLoose()

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

zip()

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

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

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

$zipped->all();

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

Комментарии (1)

anme

Хорошая штука, эти коллекции.

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

Разметка: ? ?

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