Класс Collection
Коллекция — это неизменяемый список элементов с несколькими функциями для итерации, группирования, преобразования и извлечения информации из него.
Краткое описание методов
-
__construct() public
Конструктор. Вы можете указать массив или любой итерируемый объект
-
__debugInfo() public
Возвращает массив, который может быть использован для описания внутреннего состояния этого объекта.
-
__serialize() public
Возвращает массив для сериализации этого объекта.
-
__unserialize() public
Восстанавливает экземпляр Collection.
-
_createMatcherFilter() protected
Возвращает вызываемый объект, который принимает значение и возвращает, соответствует ли оно определённому условию.
-
_extract() protected
Возвращает столбец из $data, который можно извлечь, итерируясь по именам столбцов, содержащимся в $path. Возвращает массивы для элементов, представленных
{*} -
_propertyExtractor() protected
Возвращает вызываемый объект, который может быть использован для извлечения свойства или столбца из массива или объекта на основе пути, разделённого точками.
-
_simpleExtract() protected
Возвращает столбец из $data, который можно извлечь, итерируясь по именам столбцов, содержащимся в $path.
-
append() public
Возвращает новую коллекцию в результате конкатенации списка элементов в этой коллекции со списком переданных элементов.
-
appendItem() public
Добавляет один элемент, создавая новую коллекцию.
-
avg() public
Возвращает среднее значение всех значений, извлечённых с помощью $path или этой коллекции.
-
buffered() public
Возвращает новую коллекцию, в которой операции, выполняемые этой коллекцией, выполняются только один раз. Независимо от того, сколько раз новая коллекция будет итерироваться, эти операции будут выполнены только один раз.
-
cartesianProduct() public
Создаёт новую коллекцию, которая является декартовым произведением текущей коллекции.
-
chunk() public
Разбивает коллекцию на более мелкие массивы заданного размера.
-
chunkWithKeys() public
Разбивает коллекцию на более мелкие массивы заданного размера.
-
combine() public
Возвращает новую коллекцию, где значения извлекаются на основе пути значения, а затем индексируются по пути ключа. Этот метод может дополнительно создавать группы родительских элементов на основе пути свойства группы.
-
compile() public
Проходит по всем элементам этой коллекции один раз, выполняет все наложенные операции над ними и возвращает новую коллекцию с результатом. Это полезно для преобразования неперематываемых внутренних итераторов в коллекцию, которую можно перематывать и использовать несколько раз.
-
contains() public
Возвращает true, если $value присутствует в этой коллекции. Сравнение производится по значению и типу.
-
count() public
Возвращает количество элементов в коллекции.
-
countBy() public
Сортирует список в группы и возвращает количество элементов в каждой группе. Аналогично groupBy, но вместо возвращения списка значений возвращает счёт значений в данной группе.
-
countKeys() public
Возвращает количество уникальных ключей в этом итераторе. Это то же самое, что и количество элементов, которые будет содержать коллекция после вызова
toArray() -
each() public
Применяет обратный вызов к элементам в этой коллекции.
-
every() public
Возвращает true, если все значения в этой коллекции проходят проверку, заданную в обратном вызове.
-
extract() public
Возвращает новую коллекцию, содержащую значение столбца или свойства, найденного в каждом из элементов.
-
filter() public
Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые проходят проверку. В результирующей коллекции будут присутствовать только те значения, для которых обратный вызов возвращает true.
-
first() public
Возвращает первый результат в этой коллекции.
-
firstMatch() public
Возвращает первый результат, соответствующий всем парам ключ-значение, перечисленным в условиях.
-
groupBy() public
Разбивает коллекцию на наборы, сгруппированные по результату запуска каждого значения через обратный вызов. Если $callback — это строка вместо вызываемого объекта, группирует по свойству, названному $callback в каждом из значений.
-
indexBy() public
Для списка и функции обратного вызова, возвращающей ключ для каждого элемента в списке (или имя свойства), возвращает объект с индексом каждого элемента. Подобно groupBy, но для случаев, когда ключи уникальны.
-
insert() public
Возвращает новую коллекцию, содержащую каждый из элементов, найденных в
$values, как свойство в соответствующих элементах этой коллекции. Свойство, куда будут вставлены значения, описывается параметром$path. -
isEmpty() public
Возвращает, есть ли элементы в этой коллекции.
-
jsonSerialize() public
Возвращает данные, которые могут быть преобразованы в JSON. Это возвращает те же данные, что и
toArray(), содержащие только уникальные ключи. -
last() public
Возвращает последний результат в этой коллекции.
-
lazy() public
Возвращает новую коллекцию, где все операции, присоединённые к ней, гарантированно будут выполняться лениво. То есть элементы будут выдаваться по одному.
-
listNested() public
Возвращает новую коллекцию с каждым из элементов этой коллекции после выравнивания структуры дерева. Структура дерева определяется вложенными элементами под ключом с известным именем. Это имя можно указать, используя параметр '$nestingKey'.
-
map() public
Возвращает другую коллекцию после модификации каждого из значений в этой с помощью предоставленного вызываемого объекта.
-
match() public
Просматривает каждое значение в списке, возвращая коллекцию всех значений, содержащих все пары ключ-значение, перечисленные в $conditions.
-
max() public
Возвращает наибольший элемент в этой коллекции после сортировки по свойству. Обратитесь к методу sortBy для получения информации о вызове обратного вызова и параметре $sort.
-
median() public
Возвращает медиану всех значений, извлечённых с помощью $path или этой коллекции.
-
min() public
Возвращает самый нижний элемент в этом наборе после сортировки по свойству. Обратитесь к методу sortBy для получения информации о коллбэке и параметрах $sort.
-
nest() public
Возвращает новый набор, где значения вложены в структуру дерева на основе пути свойства id и пути свойства родительского id.
-
newCollection() protected
Возвращает новый набор.
-
optimizeUnwrap() protected
Распаковывает этот итератор и возвращает самый простой итерируемый объект, который можно использовать для извлечения данных.
-
prepend() public
Добавляет набор элементов в начало набора, создавая новый набор.
-
prependItem() public
Добавляет один элемент в начало, создавая новый набор.
-
reduce() public
Сворачивает значения в этом наборе в одно значение, как результат применения коллбэк-функции ко всем элементам. $zero — начальное состояние свертки, и каждый последующий шаг должен возвращаться коллбэк-функцией. Если $zero опущен, первое значение набора будет использовано вместо него, и свертка начнется со второго элемента.
-
reject() public
Просматривает каждое значение в наборе и возвращает другой набор со всеми значениями, которые не проходят проверку на истинность. Это противоположно
filter. -
sample() public
Возвращает новый набор с максимальным количеством случайных элементов $size из этого набора.
-
serialize() public
Возвращает строковое представление этого объекта, которое можно использовать для его восстановления.
-
shuffle() public
Возвращает новый набор с элементами в случайном порядке. Эта функция не сохраняет исходные ключи в наборе.
-
skip() public
Возвращает новый набор, который пропустит указанное количество элементов в начале итерации.
-
some() public
Возвращает true, если хотя бы одно из значений в этом наборе проходит проверку на истинность, заданную в коллбэке.
-
sortBy() public
Возвращает отсортированный итератор элементов из этого набора, упорядоченных по возрастанию результатов выполнения каждого значения через коллбэк. $callback также может быть строкой, представляющей имя столбца или свойства.
-
stopWhen() public
Создает новый набор, который при итерации перестанет генерировать результаты, если предоставленное условие примет значение true.
-
sumOf() public
Возвращает общую сумму всех значений, извлечённых с помощью $matcher или из этого набора.
-
take() public
Возвращает новый набор с максимальным количеством элементов $size в внутреннем порядке создания этого набора. Если указан второй параметр, он определит, с какой позиции начинать извлечение элементов.
-
takeLast() public
Возвращает последние N элементов набора.
-
through() public
Пропускает этот набор через вызываемый объект в качестве первого аргумента. Это полезно для декорирования всего набора другим объектом.
-
toArray() public
Возвращает массивное представление результатов.
-
toList() public
Возвращает массивное представление результатов с численными индексами. Это эквивалентно вызову
toArray(false). -
transpose() public
Транспонирует строки и столбцы в столбцы и строки.
-
unfold() public
Создаёт новый набор, где элементы являются конкатенацией списков элементов, сгенерированных функцией преобразования, применённой к каждому элементу исходного набора.
-
unserialize() public
Десериализует переданную строку и восстанавливает экземпляр Collection.
-
unwrap() public
Возвращает ближайший вложенный итератор, который можно безопасно пройти, не теряя возможных преобразований. Это используется в основном для удаления пустых обёрток IteratorIterator, которые могут только замедлить процесс итерации.
-
zip() public
Комбинирует элементы этого набора с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
-
zipWith() public
Комбинирует элементы этого набора с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
Подробное описание методов
__construct() public
__construct(iterable $items)
Конструктор. Вы можете предоставить массив или любой итерируемый объект
Parameters
-
iterable$items Элементы.
Throws
InvalidArgumentExceptionЕсли передан неверный тип для элементов.
__debugInfo() public
__debugInfo(): array<string, mixed>
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Returns
array<string, mixed>__serialize() public
__serialize(): array
Возвращает массив для сериализации этого объекта.
Returns
array__unserialize() public
__unserialize(array $data): void
Восстанавливает экземпляр Collection.
Parameters
-
array$data Массив данных.
Returns
void_createMatcherFilter() protected
_createMatcherFilter(array $conditions): Closure
Возвращает вызываемый объект, который получает значение и возвращает, соответствует ли оно определенному условию.
Parameters
-
array$conditions Список условий для соответствия в формате ключ-значение, где ключ — это путь к свойству для получения из текущего элемента, а значение — это значение, с которым будет сравниваться элемент.
Returns
Closure_extract() protected
_extract(ArrayAccess|array $data, array<string> $parts): mixed
Возвращает столбец из $data, который может быть извлечен путем итерации по именам столбцов, содержащимся в $path. Он будет возвращать массивы для элементов, представленных с помощью {*}
Parameters
-
ArrayAccess|array$data Данные.
-
array<string>$parts Путь для извлечения.
Returns
mixed_propertyExtractor() protected
_propertyExtractor(callable|string $path): callable
Возвращает вызываемый объект, который можно использовать для извлечения свойства или столбца из массива или объекта на основе пути, разделенного точками.
Parameters
-
callable|string$path Путь, разделенный точками, к столбцу, который нужно следовать, чтобы можно было вернуть последний, или вызываемый объект, который позаботится об этом.
Returns
callable_simpleExtract() protected
_simpleExtract(ArrayAccess|array $data, array<string> $parts): mixed
Возвращает столбец из $data, который может быть извлечен путем итерации по именам столбцов, содержащимся в $path
Parameters
-
ArrayAccess|array$data Данные.
-
array<string>$parts Путь для извлечения.
Returns
mixedappend() public
append(iterable $items): self
Возвращает новую коллекцию как результат конкатенации списка элементов в этой коллекции со списком переданных элементов
Parameters
-
iterable$items
Returns
selfappendItem() public
appendItem(mixed $item, mixed $key = null): self
Добавляет один элемент, создавая новую коллекцию.
Parameters
-
mixed$item -
mixed$key optional
Returns
selfavg() public
avg(callable|string|null $path = null): float|int|null
Возвращает среднее значение всех значений, извлеченных с помощью $path или из этой коллекции.
Example:
$items = [
['invoice' => ['total' => 100]],
['invoice' => ['total' => 200]]
];
$total = (new Collection($items))->avg('invoice.total');
// Total: 150
$total = (new Collection([1, 2, 3]))->avg();
// Total: 2 Среднее значение пустого набора или 0 строк равно null. Коллекции со значениями null не считаются пустыми.
Parameters
-
callable|string|null$path optional
Returns
float|int|nullbuffered() public
buffered(): self
Возвращает новую коллекцию, в которой выполняются операции, выполняемые этой коллекцией. Независимо от того, сколько раз итерируется новая коллекция, эти операции будут выполняться только один раз.
Это также можно использовать для того, чтобы любой неперематываемый итератор стал перематываемым.
Returns
selfcartesianProduct() public
cartesianProduct(callable|null $operation = null, callable|null $filter = null): Cake\Collection\CollectionInterface
Создает новую коллекцию, которая является декартовым произведением текущей коллекции
Для создания декартова произведения коллекция должна содержать одно измерение данных.
Example
$collection = new Collection([['A', 'B', 'C'], [1, 2, 3]]);
$result = $collection->cartesianProduct()->toArray();
$expected = [
['A', 1],
['A', 2],
['A', 3],
['B', 1],
['B', 2],
['B', 3],
['C', 1],
['C', 2],
['C', 3],
]; Parameters
-
callable|null$operation optional Вызываемый объект, позволяющий настраивать результат произведения.
-
callable|null$filter optional Функция обратного вызова фильтрации, которая должна возвращать true, чтобы результат был частью окончательных результатов.
Returns
Cake\Collection\CollectionInterfaceThrows
LogicExceptionchunk() public
chunk(int $chunkSize): self
Разбивает коллекцию на меньшие массивы заданного размера.
Example:
$items [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; $chunked = (new Collection($items))->chunk(3)->toList(); // Returns [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]
Parameters
-
int$chunkSize
Returns
selfchunkWithKeys() public
chunkWithKeys(int $chunkSize, bool $keepKeys = true): self
Разбивает коллекцию на меньшие массивы заданного размера.
Example:
$items ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6]; $chunked = (new Collection($items))->chunkWithKeys(3)->toList(); // Returns [['a' => 1, 'b' => 2, 'c' => 3], ['d' => 4, 'e' => 5, 'f' => 6]]
Parameters
-
int$chunkSize -
bool$keepKeys optional
Returns
selfcombine() public
combine(callable|string $keyPath, callable|string $valuePath, callable|string|null $groupPath = null): self
Возвращает новую коллекцию, в которой значения извлекаются на основе пути к значению, а затем индексируются по пути к ключу. Дополнительно этот метод может создавать родительские группы на основе пути к свойству группы.
Examples:
$items = [
['id' => 1, 'name' => 'foo', 'parent' => 'a'],
['id' => 2, 'name' => 'bar', 'parent' => 'b'],
['id' => 3, 'name' => 'baz', 'parent' => 'a'],
];
$combined = (new Collection($items))->combine('id', 'name');
// Result will look like this when converted to array
[
1 => 'foo',
2 => 'bar',
3 => 'baz',
];
$combined = (new Collection($items))->combine('id', 'name', 'parent');
// Result will look like this when converted to array
[
'a' => [1 => 'foo', 3 => 'baz'],
'b' => [2 => 'bar']
]; Parameters
-
callable|string$keyPath -
callable|string$valuePath -
callable|string|null$groupPath optional
Returns
selfcompile() public
compile(bool $keepKeys = true): self
Итерирует один раз все элементы в этой коллекции и выполняет все накопленные операции над ними, наконец, возвращает новую коллекцию с результатом. Это полезно для преобразования неперематываемых внутренних итераторов в коллекцию, которую можно перематывать и использовать несколько раз.
Распространенный пример использования — повторное использование одной и той же переменной для вычисления разных данных. В таких случаях может быть полезно и эффективнее сначала скомпилировать коллекцию, а затем применить к ней дополнительные операции.
Example:
$collection->map($mapper)->sortBy('age')->extract('name');
$compiled = $collection->compile();
$isJohnHere = $compiled->some($johnMatcher);
$allButJohn = $compiled->filter($johnMatcher); В приведенном выше примере, если бы коллекция не была скомпилирована ранее, итерации для map, sortBy и extract были бы выполнены дважды: один раз для получения $isJohnHere и один раз для $allButJohn
Вы можете рассматривать этот метод как способ создания контрольных точек для сложных вычислений в коллекции.
Parameters
-
bool$keepKeys optional
Returns
selfcontains() public
contains(mixed $value): bool
Возвращает true, если $value присутствует в этой коллекции. Сравнения выполняются как по значению, так и по типу.
Parameters
-
mixed$value
Returns
boolcount() public
count(): int
Возвращает количество элементов в коллекции.
ПРЕДУПРЕЖДЕНИЯ:
Изменяет текущую позицию итератора:
Вызов этого метода во время итерации по этой коллекции, например, в цикле foreach, приведет к неопределенному поведению. Избегайте этого.
Потребляет все элементы для коллекций NoRewindIterator:
Для некоторых типов коллекций вызов этого метода может сделать их непригодными для дальнейшего использования. То есть, вы можете больше не получить элементы из них или итерировать по ним.
Для решения этой проблемы создайте новую коллекцию с помощью метода buffered()
Может сообщать о большем количестве элементов, чем уникальных ключей:
Любая коллекция, составленная путем объединения коллекций или содержащая внутренние итераторы, возвращающие дублирующие ключи, будет сообщать о большем количестве элементов с помощью этой функции, чем фактическое количество элементов при преобразовании коллекций в массив с ключами. Это происходит потому, что дублирующие ключи сводятся к одному в конечном массиве, в то время как этот метод подсчета учитывает только количество элементов после преобразования в обычный список.
Если вам нужно количество элементов с учетом ключей (количество уникальных ключей), вы можете вызвать countKeys()
Возвращает
intcountBy() public
countBy(callable|string $path): self
Сортирует список по группам и возвращает количество элементов в каждой группе. Аналогично groupBy, но вместо возвращения списка значений возвращает количество значений в каждой группе.
Если $callback является строкой, это должно быть имя свойства для извлечения или путь через свойства, разделенные точкой, для получения последнего свойства в пути.
Пример:
$items = [
['id' => 1, 'name' => 'foo', 'parent_id' => 10],
['id' => 2, 'name' => 'bar', 'parent_id' => 11],
['id' => 3, 'name' => 'baz', 'parent_id' => 10],
];
$group = (new Collection($items))->countBy('parent_id');
// Or
$group = (new Collection($items))->countBy(function ($e) {
return $e['parent_id'];
});
// Result will look like this when converted to array
[
10 => 2,
11 => 1
]; Параметры
-
callable|string$path
Возвращает
selfcountKeys() public
countKeys(): int
Возвращает количество уникальных ключей в этом итераторе. Это равно количеству элементов в коллекции после вызова toArray()
Этот метод имеет ряд ограничений. Подробности см. в CollectionInterface::count()
Возвращает
inteach() public
each(callable $callback): $this
Применяет коллбек к элементам в этой коллекции.
Пример:
$collection = (new Collection($items))->each(function ($value, $key) {
echo "Element $key: $value";
}); Параметры
-
callable$callback
Возвращает
$thisevery() public
every(callable $callback): bool
Возвращает true, если все значения в этой коллекции проходят проверку, заданную в коллбеке.
Коллбек получает значение и ключ проверяемого элемента и должен вернуть true, если проверка прошла успешно.
Пример:
$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) {
return $value > 21;
}); Пустые коллекции всегда возвращают true.
Параметры
-
callable$callback
Возвращает
boolextract() public
extract(callable|string $path): self
Возвращает новую коллекцию, содержащую значения столбцов или свойств, найденные в каждом элементе.
Матчер может быть строкой с именем свойства для извлечения или путем через свойства, разделенными точкой, для получения последнего свойства в пути.
Если столбец или свойство не были найдены для конкретного элемента в коллекции, в этой позиции будет null.
Пример:
Извлечение имени пользователя для всех комментариев в массиве:
$items = [
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']],
['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']]
];
$extracted = (new Collection($items))->extract('comment.user.name');
// Result will look like this when converted to array
['Mark', 'Renan'] Также можно извлечь уплощенную коллекцию из вложенных свойств
$items = [
['comment' => ['votes' => [['value' => 1], ['value' => 2], ['value' => 3]]],
['comment' => ['votes' => [['value' => 4]]
];
$extracted = (new Collection($items))->extract('comment.votes.{*}.value');
// Result will contain
[1, 2, 3, 4] Параметры
-
callable|string$path
Возвращает
selffilter() public
filter(callable|null $callback = null): self
Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые прошли проверку. В результирующей коллекции будут только те значения, для которых коллбек возвращает true.
Каждый раз, когда коллбек выполняется, он получает значение элемента в текущей итерации, ключ элемента и эту коллекцию в качестве аргументов в указанном порядке.
Пример:
Фильтрация нечетных чисел в массиве, в итоге в результирующей коллекции будет только значение 2:
$collection = (new Collection([1, 2, 3]))->filter(function ($value, $key) {
return $value % 2 === 0;
}); Параметры
-
callable|null$callback optional
Возвращает
selffirst() public
first(): mixed
Возвращает первый результат в этой коллекции
Возвращает
mixedfirstMatch() public
firstMatch(array $conditions): mixed
Возвращает первый результат, соответствующий всем парам ключ-значение, перечисленным в условиях.
Параметры
-
array$conditions
Возвращает
mixedgroupBy() public
groupBy(callable|string $path): self
Разбивает коллекцию на наборы, сгруппированные по результату применения коллбека к каждому значению. Если $callback является строкой вместо вызываемого объекта, группирует по свойству, указанному в $callback, для каждого значения.
Если $callback является строкой, это должно быть имя свойства для извлечения или путь через свойства, разделенные точкой, для получения последнего свойства в пути.
Пример:
$items = [
['id' => 1, 'name' => 'foo', 'parent_id' => 10],
['id' => 2, 'name' => 'bar', 'parent_id' => 11],
['id' => 3, 'name' => 'baz', 'parent_id' => 10],
];
$group = (new Collection($items))->groupBy('parent_id');
// Or
$group = (new Collection($items))->groupBy(function ($e) {
return $e['parent_id'];
});
// Result will look like this when converted to array
[
10 => [
['id' => 1, 'name' => 'foo', 'parent_id' => 10],
['id' => 3, 'name' => 'baz', 'parent_id' => 10],
],
11 => [
['id' => 2, 'name' => 'bar', 'parent_id' => 11],
]
]; Параметры
-
callable|string$path
Возвращает
selfindexBy() public
indexBy(callable|string $path): self
Принимает список и функцию коллбек, возвращающую ключ для каждого элемента в списке (или имя свойства), возвращает объект с индексом каждого элемента. Похоже на groupBy, но для случаев, когда ключи уникальны.
Если $callback является строкой, это должно быть имя свойства для извлечения или путь через свойства, разделенные точкой, для получения последнего свойства в пути.
Пример:
$items = [
['id' => 1, 'name' => 'foo'],
['id' => 2, 'name' => 'bar'],
['id' => 3, 'name' => 'baz'],
];
$indexed = (new Collection($items))->indexBy('id');
// Or
$indexed = (new Collection($items))->indexBy(function ($e) {
return $e['id'];
});
// Result will look like this when converted to array
[
1 => ['id' => 1, 'name' => 'foo'],
3 => ['id' => 3, 'name' => 'baz'],
2 => ['id' => 2, 'name' => 'bar'],
]; Параметры
-
callable|string$path
Возвращает
selfinsert() public
insert(string $path, mixed $values): self
Возвращает новую коллекцию, содержащую каждый элемент, найденный в $values, как свойство соответствующих элементов в этой коллекции. Свойство, куда будут вставлены значения, описывается параметром $path
Значение $path может быть именем свойства или путем через свойства, разделенными точкой, для получения последнего свойства в пути.
Если столбец или свойство не были найдены для конкретного элемента в коллекции в рамках пути, элемент останется без изменений.
Пример:
Вставка возрастов в коллекцию, содержащую пользователей:
$items = [
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']],
['comment' => ['body' => 'awesome', 'user' => ['name' => 'Renan']]
];
$ages = [25, 28];
$inserted = (new Collection($items))->insert('comment.user.age', $ages);
// Result will look like this when converted to array
[
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark', 'age' => 25]],
['comment' => ['body' => 'awesome', 'user' => ['name' => 'Renan', 'age' => 28]]
]; Параметры
-
string$path -
mixed$values
Возвращает
selfisEmpty() public
isEmpty(): bool
Возвращает, есть ли элементы в этой коллекции
Пример:
$items [1, 2, 3]; (new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true
Возвращает
booljsonSerialize() public
jsonSerialize(): array
Возвращает данные, которые можно преобразовать в JSON. Это возвращает те же данные, что и toArray(), содержащие только уникальные ключи.
Часть интерфейса JsonSerializable.
Возвращает
arraylast() public
last(): mixed
Возвращает последний результат в этой коллекции
Возвращает
mixedlazy() public
lazy(): self
Возвращает новую коллекцию, где любые операции, присоединенные к ней, гарантированно выполняются лениво. То есть, элементы будут возвращаться по одному.
Ленивая коллекция может быть итерирована только один раз. Вторая попытка приводит к ошибке.
Возвращает
selflistNested() public
listNested(string|int $order = 'desc', callable|string $nestingKey = 'children'): self
Возвращает новую коллекцию с каждым из элементов этой коллекции после сплющивания структуры дерева. Структура дерева определяется вложением элементов под ключом с известным именем. Это имя можно указать, используя параметр '$nestingKey'.
По умолчанию будут возвращены все элементы в дереве, следуя поиске в глубину (Depth First Search), то есть элементы от верхнего родителя к листьям для каждой ветви.
Можно вернуть все элементы снизу вверх, используя подход поиска в ширину (Breadth First Search), передав параметр '$dir' со значением 'asc'. То есть, он вернёт все элементы для каждой глубины дерева сначала и снизу вверх.
Наконец, вы можете указать, чтобы получить только коллекцию с узлами-листьями в структуре дерева. Для этого передайте 'leaves' в первом аргументе.
Возможные значения для первого аргумента — псевдонимы для следующих констант, и вместо псевдонима можно использовать сами константы:
- desc: RecursiveIteratorIterator::SELF_FIRST
- asc: RecursiveIteratorIterator::CHILD_FIRST
- leaves: RecursiveIteratorIterator::LEAVES_ONLY
Пример:
$collection = new Collection([
['id' => 1, 'children' => [['id' => 2, 'children' => [['id' => 3]]]]],
['id' => 4, 'children' => [['id' => 5]]]
]);
$flattenedIds = $collection->listNested()->extract('id'); // Yields [1, 2, 3, 4, 5] Параметры
-
string|int$order необязательно -
callable|string$nestingKey необязательно
Возвращает
selfmap() public
map(callable $callback): self
Возвращает другую коллекцию после модификации каждого из значений в этой, используя предоставленный вызываемый объект.
Каждый раз, когда вызывается обратный вызов, он получает значение элемента в текущей итерации, ключ элемента и эту коллекцию в качестве аргументов в указанном порядке.
Пример:
Получение коллекции булевых значений, где true указывает, является ли человек женщиной:
$collection = (new Collection($people))->map(function ($person, $key) {
return $person->gender === 'female';
}); Параметры
-
callable$callback
Возвращает
selfmatch() public
match(array $conditions): self
Просматривает каждое значение в списке, возвращая коллекцию всех значений, содержащих все пары ключ-значение, перечисленные в $conditions.
Пример:
$items = [ ['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']], ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]; $extracted = (new Collection($items))->match(['user.name' => 'Renan']); // Result will look like this when converted to array [ ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]
Параметры
-
array$conditions
Возвращает
selfmax() public
max(callable|string $path, int $sort = \SORT_NUMERIC): mixed
Возвращает наибольший элемент в этой коллекции после сортировки по свойству. См. метод sortBy для получения информации об обратном вызове и параметре $sort.
Примеры:
// For a collection of employees
$max = $collection->max('age');
$max = $collection->max('user.salary');
$max = $collection->max(function ($e) {
return $e->get('user')->get('salary');
});
// Display employee name
echo $max->name; Параметры
-
callable|string$path -
int$sort необязательно
Возвращает
mixedmedian() public
median(callable|string|null $path = null): float|int|null
Возвращает медиану всех значений, извлеченных с помощью $path, или этой коллекции.
Пример:
$items = [
['invoice' => ['total' => 400]],
['invoice' => ['total' => 500]]
['invoice' => ['total' => 100]]
['invoice' => ['total' => 333]]
['invoice' => ['total' => 200]]
];
$total = (new Collection($items))->median('invoice.total');
// Total: 333
$total = (new Collection([1, 2, 3, 4]))->median();
// Total: 2.5 Медиана пустого набора или 0 строк — null. Коллекции с null значениями не считаются пустыми.
Параметры
-
callable|string|null$path необязательно
Возвращает
float|int|nullmin() public
min(callable|string $path, int $sort = \SORT_NUMERIC): mixed
Возвращает наименьший элемент в этой коллекции после сортировки по свойству. См. метод sortBy для получения информации об обратном вызове и параметре $sort.
Примеры:
// For a collection of employees
$min = $collection->min('age');
$min = $collection->min('user.salary');
$min = $collection->min(function ($e) {
return $e->get('user')->get('salary');
});
// Display employee name
echo $min->name; Параметры
-
callable|string$path -
int$sort необязательно
Возвращает
mixednest() public
nest(callable|string $idPath, callable|string $parentPath, string $nestingKey = 'children'): self
Возвращает новую коллекцию, где значения вложены в структуру дерева на основе пути к свойству id и пути к свойству родительского id.
Параметры
-
callable|string$idPath -
callable|string$parentPath -
string$nestingKey необязательно
Возвращает
selfnewCollection() protected
newCollection(mixed ...$args): Cake\Collection\CollectionInterface
Возвращает новую коллекцию.
Позволяет классам, использующим этот трейт, определять собственный тип возвращаемого интерфейса коллекции.
Параметры
-
mixed...$args Аргументы конструктора.
Возвращает
Cake\Collection\CollectionInterfaceoptimizeUnwrap() protected
optimizeUnwrap(): iterable
Распаковывает этот итератор и возвращает наиболее простую перебираемую структуру, которая может быть использована для извлечения данных.
Возвращает
iterableprepend() public
prepend(mixed $items): self
Добавляет набор элементов в начало коллекции, создавая новую коллекцию.
Параметры
-
mixed$items
Возвращает
selfprependItem() public
prependItem(mixed $item, mixed $key = null): self
Добавляет один элемент в начало, создавая новую коллекцию.
Параметры
-
mixed$item -
mixed$key необязательно
Возвращает
selfreduce() public
reduce(callable $callback, mixed $initial = null): mixed
Складывает значения в этой коллекции в одно значение, как результат применения функции обратного вызова ко всем элементам. $zero — начальное состояние редукции, и каждый последующий шаг должен возвращаться функцией обратного вызова. Если $zero опущен, первое значение коллекции будет использовано вместо него, и редукция начнется со второго элемента.
Параметры
-
callable$callback -
mixed$initial необязательно
Возвращает
mixedreject() public
reject(callable $callback): self
Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые не проходят проверку истинности. Это противоположно filter.
Каждый раз, когда вызывается обратный вызов, он получает значение элемента в текущей итерации, ключ элемента и эту коллекцию в качестве аргументов в указанном порядке.
Пример:
Фильтрация чётных чисел в массиве, в итоге в результирующей коллекции будут только значения 1 и 3:
$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) {
return $value % 2 === 0;
}); Параметры
-
callable$callback
Возвращает
selfsample() public
sample(int $length = 10): self
Возвращает новую коллекцию с максимальным $size случайным элементом из этой коллекции.
Параметры
-
int$length необязательно
Возвращает
selfserialize() public
serialize(): string
Возвращает строковое представление этого объекта, которое можно использовать для его восстановления.
Возвращает
stringshuffle() public
shuffle(): self
Возвращает новую коллекцию с элементами в случайном порядке. Эта функция не сохраняет исходные ключи в коллекции.
Возвращает
selfskip() public
skip(int $length): self
Возвращает новую коллекцию, которая пропустит указанное количество элементов в начале итерации.
Параметры
-
int$length
Возвращает
selfsome() public
some(callable $callback): bool
Возвращает true, если хотя бы одно из значений в этом наборе данных удовлетворяет условию, заданному в обратном вызове.
Обратный вызов получает значение и ключ проверяемого элемента и должен возвращать true, если условие выполняется.
Пример:
$hasYoungPeople = (new Collection([24, 45, 15]))->some(function ($value, $key) {
return $value < 21;
}); Параметры
-
callable$callback
Возвращает
boolsortBy() public
sortBy(callable|string $path, int $order = \SORT_DESC, int $sort = \SORT_NUMERIC): self
Возвращает отсортированный итератор элементов в этом наборе данных, упорядоченных по возрастанию результатов применения обратного вызова к каждому значению. $callback также может быть строкой, представляющей имя столбца или свойства.
Обратный вызов будет получать в качестве первого аргумента каждый элемент в $items, возвращаемое значение обратного вызова будет использовано в качестве значения для сортировки данного элемента. Обратите внимание, что функция обратного вызова может быть вызвана более одного раза для одного элемента.
Пример:
$items = $collection->sortBy(function ($user) {
return $user->age;
});
// alternatively
$items = $collection->sortBy('age');
// or use a property path
$items = $collection->sortBy('department.name');
// output all user name order by their age in descending order
foreach ($items as $user) {
echo $user->name;
} Параметры
-
callable|string$path -
int$order необязательно -
int$sort необязательно
Возвращает
selfstopWhen() public
stopWhen(callable|array $condition): self
Создаёт новый набор данных, который при итерации перестанет возвращать результаты, если предоставленное условие станет истинным.
Это полезно для работы с бесконечными итераторами или любым генератором, который может начать возвращать некорректные элементы в определённый момент. Например, при чтении строк из потока файла вы можете остановить итерацию после достижения определённого значения.
Пример:
Получение массива строк из CSV-файла до тех пор, пока столбец со временем не будет меньше заданной даты
$lines = (new Collection($fileLines))->stopWhen(function ($value, $key) {
return (new DateTime($value))->format('Y') < 2012;
})
->toArray(); Получение элементов до тех пор, пока не будет найден первый неутверждённый сообщение:
$comments = (new Collection($comments))->stopWhen(['is_approved' => false]);
Параметры
-
callable|array$condition
Возвращает
selfsumOf() public
sumOf(callable|string|null $path = null): float|int
Возвращает сумму всех значений, извлечённых с помощью $matcher, или всего набора данных.
Пример:
$items = [
['invoice' => ['total' => 100]],
['invoice' => ['total' => 200]]
];
$total = (new Collection($items))->sumOf('invoice.total');
// Total: 300
$total = (new Collection([1, 2, 3]))->sumOf();
// Total: 6 Параметры
-
callable|string|null$path необязательно
Возвращает
float|inttake() public
take(int $length = 1, int $offset = 0): self
Возвращает новый набор данных с максимальным количеством $size элементов в порядке, в котором они были созданы. Если передан второй параметр, он определит позицию, с которой начинать выбор элементов.
Параметры
-
int$length необязательно -
int$offset необязательно
Возвращает
selftakeLast() public
takeLast(int $length): self
Возвращает последние N элементов набора данных
Пример:
$items = [1, 2, 3, 4, 5]; $last = (new Collection($items))->takeLast(3); // Result will look like this when converted to array [3, 4, 5];
Параметры
-
int$length
Возвращает
selfthrough() public
through(callable $callback): self
Пропускает этот набор данных через вызываемый объект в качестве первого аргумента. Это полезно для добавления к всему набору данных другого объекта.
Пример:
$items = [1, 2, 3];
$decorated = (new Collection($items))->through(function ($collection) {
return new MyCustomCollection($collection);
}); Параметры
-
callable$callback
Возвращает
selftoArray() public
toArray(bool $keepKeys = true): array
Возвращает массив результатов
Параметры
-
bool$keepKeys необязательно
Возвращает
arraytoList() public
toList(): array
Возвращает массив результатов с числовыми индексами. Это эквивалентно вызову toArray(false)
Возвращает
arraytranspose() public
transpose(): Cake\Collection\CollectionInterface
Транспонирует строки и столбцы в столбцы и строки
Пример:
$items = [
['Products', '2012', '2013', '2014'],
['Product A', '200', '100', '50'],
['Product B', '300', '200', '100'],
['Product C', '400', '300', '200'],
]
$transpose = (new Collection($items))->transpose()->toList();
// Returns
// [
// ['Products', 'Product A', 'Product B', 'Product C'],
// ['2012', '200', '300', '400'],
// ['2013', '100', '200', '300'],
// ['2014', '50', '100', '200'],
// ] Возвращает
Cake\Collection\CollectionInterfaceИсключения
LogicExceptionunfold() public
unfold(callable|null $callback = null): self
Создаёт новый набор данных, где элементы являются конкатенацией списков элементов, сгенерированных функцией преобразования, применённой к каждому элементу исходного набора данных.
Функция преобразования будет получать значение и ключ для каждого элемента в наборе данных в указанном порядке, и должна возвращать массив или объект Traversable, который может быть конкатенирован с конечным результатом.
Если функция преобразования не передана, будет использована функция "тождества". Это полезно, когда каждый элемент исходного набора данных представляет собой список элементов, которые необходимо добавить друг к другу.
Пример:
$items [[1, 2, 3], [4, 5]]; $unfold = (new Collection($items))->unfold(); // Returns [1, 2, 3, 4, 5]
Использование функции преобразования
$items [1, 2, 3];
$allItems = (new Collection($items))->unfold(function ($page) {
return $service->fetchPage($page)->toArray();
}); Параметры
-
callable|null$callback необязательно
Возвращает
selfunserialize() public
unserialize(string $collection): void
Десериализует переданную строку и восстанавливает экземпляр Collection
Параметры
-
string$collection Сериализованный набор данных
Возвращает
voidunwrap() public
unwrap(): Traversable
Возвращает ближайший вложенный итератор, который можно безопасно перебрать, не теряя возможных преобразований. Это используется в основном для удаления пустых обёрток IteratorIterator, которые могут только замедлять процесс итерации.
Возвращает
Traversablezip() public
zip(iterable $items): self
Комбинирует элементы этого набора данных с каждым элементом переданных итераторов, используя их позиционный индекс в качестве ссылки.
Пример:
$collection = new Collection([1, 2]); $collection->zip([3, 4], [5, 6])->toList(); // returns [[1, 3, 5], [2, 4, 6]]
Параметры
-
iterable$items
Возвращает
selfzipWith() public
zipWith(iterable $items, callable $callback): self
Комбинирует элементы этого набора данных с каждым элементом переданных итераторов, используя их позиционный индекс в качестве ссылки.
Результирующий элемент будет являться возвращаемым значением функции $callable.
Пример:
$collection = new Collection([1, 2]);
$zipped = $collection->zipWith([3, 4], [5, 6], function (...$args) {
return array_sum($args);
});
$zipped->toList(); // returns [9, 12]; [(1 + 3 + 5), (2 + 4 + 6)] Параметры
-
iterable$items -
callable$callback
Возвращает
self
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.4/class-Cake.Collection.Collection.html