Класс NestIterator
Тип коллекции, который осведомлён о вложенных элементах и предоставляет методы для проверки или извлечения их
Краткое описание свойств
- $_nestKey protected
callable|stringИмя свойства, содержащего вложенные элементы для каждого элемента
Краткое описание методов
-
__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
Возвращает первый результат, соответствующий всем парам ключ-значение, перечисленным в условиях.
-
getChildren() public
Возвращает итератор, содержащий дочерние элементы для текущего элемента.
-
groupBy() public
Разбивает коллекцию на множества, сгруппированные по результату выполнения каждого значения с помощью обратного вызова. Если $callback — строка вместо вызываемого объекта, группирует по свойству, названному $callback, для каждого из значений.
-
hasChildren() public
Возвращает true, если под настроенным ключом вложенности для текущего элемента хранится массив или итератор.
-
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
Десериализует переданную строку и восстанавливает экземпляр коллекции.
-
unwrap() public
Возвращает самый близкий вложенный итератор, который можно безопасно пройти, не теряя возможных преобразований. Это используется в основном для удаления пустых обёрток IteratorIterator, которые могут только замедлить процесс итерации.
-
zip() public
Объединяет элементы этого набора с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
-
zipWith() public
Объединяет элементы этого набора с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
Подробное описание методов
__construct() public
__construct(iterable $items, callable|string $nestKey)
Конструктор
Параметры
-
iterable$items Элементы коллекции.
-
callable|string$nestKey Свойство, содержащее вложенные элементы. Если передан вызываемый объект, он должен возвращать дочерние элементы для переданного элемента
__debugInfo() public
__debugInfo(): array<string, mixed>
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Возвращает
array<string, mixed>__serialize() public
__serialize(): array
Возвращает массив для сериализации этого объекта.
Возвращает
array__unserialize() public
__unserialize(array $data): void
Восстанавливает экземпляр коллекции.
Параметры
-
array$data Массив данных.
Возвращает
void_createMatcherFilter() protected
_createMatcherFilter(array $conditions): Closure
Возвращает вызываемый объект, который получает значение и возвращает, соответствует ли оно определенному условию.
Параметры
-
array$conditions Список условий для соответствия в формате «ключ-значение», где ключ — это путь к свойству для получения из текущего элемента, а значение — это значение, с которым будет сравниваться элемент.
Возвращает
Closure_extract() protected
_extract(ArrayAccess|array $data, array<string> $parts): mixed
Возвращает столбец из $data, который может быть извлечен путем итерации по именам столбцов, содержащимся в $path. Он будет возвращать массивы для элементов, представленных с помощью {*}
Параметры
-
ArrayAccess|array$data Данные.
-
array<string>$parts Путь для извлечения.
Возвращает
mixed_propertyExtractor() protected
_propertyExtractor(callable|string $path): callable
Возвращает вызываемый объект, который может быть использован для извлечения свойства или столбца из массива или объекта на основе пути, разделенного точками.
Параметры
-
callable|string$path Путь, разделенный точками, к столбцу, который необходимо следовать, чтобы можно было вернуть последний, или вызываемый объект, который позаботится об этом.
Возвращает
callable_simpleExtract() protected
_simpleExtract(ArrayAccess|array $data, array<string> $parts): mixed
Возвращает столбец из $data, который может быть извлечен путем итерации по именам столбцов, содержащимся в $path
Параметры
-
ArrayAccess|array$data Данные.
-
array<string>$parts Путь для извлечения.
Возвращает
mixedappend() public
append(iterable $items): self
Возвращает новую коллекцию как результат конкатенации списка элементов в этой коллекции со списком переданных элементов
Параметры
-
iterable$items
Возвращает
selfappendItem() public
appendItem(mixed $item, mixed $key = null): self
Добавить один элемент, создав новую коллекцию.
Параметры
-
mixed$item -
mixed$key optional
Возвращает
selfavg() public
avg(callable|string|null $path = null): float|int|null
Возвращает среднее значение всех значений, извлеченных с помощью $path или из этой коллекции.
Пример:
$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 значениями не считаются пустыми.
Параметры
-
callable|string|null$path optional
Возвращает
float|int|nullbuffered() public
buffered(): self
Возвращает новую коллекцию, в которой выполняются операции, выполняемые этой коллекцией. Независимо от того, сколько раз итерируется новая коллекция, эти операции будут выполняться только один раз.
Это также можно использовать для того, чтобы любой неперематываемый итератор стал перематываемым.
Возвращает
selfcartesianProduct() public
cartesianProduct(callable|null $operation = null, callable|null $filter = null): Cake\Collection\CollectionInterface
Создает новую коллекцию, которая является декартовым произведением текущей коллекции
Для создания декартова произведения коллекция должна содержать одно измерение данных.
Пример
$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],
]; Параметры
-
callable|null$operation optional Вызываемый объект, позволяющий настроить результат продукта.
-
callable|null$filter optional Функция обратного вызова фильтрации, которая должна возвращать true, чтобы результат был частью окончательных результатов.
Возвращает
Cake\Collection\CollectionInterfaceВызывает исключение
LogicExceptionchunk() public
chunk(int $chunkSize): self
Разбивает коллекцию на меньшие массивы заданного размера.
Пример:
$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]]
Параметры
-
int$chunkSize
Возвращает
selfchunkWithKeys() public
chunkWithKeys(int $chunkSize, bool $keepKeys = true): self
Разбивает коллекцию на меньшие массивы заданного размера.
Пример:
$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]]
Параметры
-
int$chunkSize -
bool$keepKeys optional
Возвращает
selfcombine() public
combine(callable|string $keyPath, callable|string $valuePath, callable|string|null $groupPath = null): self
Возвращает новую коллекцию, где значения извлекаются на основе пути к значению, а затем индексируются по пути к ключу. Дополнительно этот метод может создавать родительские группы на основе пути к свойству группы.
Примеры:
$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']
]; Параметры
-
callable|string$keyPath -
callable|string$valuePath -
callable|string|null$groupPath optional
Возвращает
selfcompile() public
compile(bool $keepKeys = true): self
Итерирует один раз все элементы в этой коллекции и выполняет все накопленные операции над ними, наконец, возвращает новую коллекцию с результатом. Это полезно для преобразования неперематываемых внутренних итераторов в коллекцию, которая может быть перемотана и использована несколько раз.
Распространенный сценарий использования — повторное использование одной и той же переменной для вычисления разных данных. В таких случаях может быть полезно и эффективнее сначала скомпилировать коллекцию, а затем применить к ней дополнительные операции.
Пример:
$collection->map($mapper)->sortBy('age')->extract('name');
$compiled = $collection->compile();
$isJohnHere = $compiled->some($johnMatcher);
$allButJohn = $compiled->filter($johnMatcher); В приведенном выше примере, если бы коллекция не была скомпилирована раньше, итерации для map, sortBy и extract были бы выполнены дважды: один раз для получения $isJohnHere и один раз для $allButJohn
Можно рассматривать этот метод как способ создания контрольных точек для сложных вычислений в коллекции.
Параметры
-
bool$keepKeys optional
Возвращает
selfcontains() public
contains(mixed $value): bool
Возвращает true, если $value присутствует в этой коллекции. Сравнения проводятся как по значению, так и по типу.
Параметры
-
mixed$value
Возвращает
boolcount() public
count(): int
Возвращает количество элементов в коллекции.
ПРЕДУПРЕЖДЕНИЯ:
Изменит текущую позицию итератора:
Вызов этого метода одновременно с итерацией по этой коллекции, например, в цикле foreach, приведёт к неопределённому поведению. Избегайте этого.
Потребляет все элементы для коллекций NoRewindIterator:
В некоторых типах коллекций вызов этого метода может сделать их непригодными для дальнейшего использования. То есть вы больше не сможете извлекать из них элементы или итерироваться по ним.
В частности, любая коллекция, использующая генератор (функция с оператором yield) или небуферизованный курсор базы данных, не будет принимать другие вызовы функций после вызова count().
Создайте новую коллекцию с помощью метода buffered() для решения этой проблемы.
Может сообщить о большем количестве элементов, чем уникальных ключей:
Любая коллекция, созданная путем добавления коллекций друг к другу или имеющая внутренние итераторы, возвращающие дубликаты ключей, будет сообщать о большем количестве элементов с помощью этой функции, чем окончательное количество элементов при преобразовании коллекций в индексированный массив. Это связано с тем, что дубликаты ключей будут объединены в один в итоговом массиве, тогда как этот метод count учитывает только количество элементов после преобразования в простой список.
Если вам нужно количество элементов с учётом ключей (количество уникальных ключей), вы можете вызвать 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
Возвращает
mixedgetChildren() public
getChildren(): RecursiveIterator
Возвращает объект, по которому можно пройти, содержащий дочерние элементы для текущего элемента
Возвращает
RecursiveIteratorgroupBy() 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
Возвращает
selfhasChildren() public
hasChildren(): bool
Возвращает true, если для текущего элемента хранится массив или объект, по которому можно пройти, под настроенным nestKey
Возвращает
boolindexBy() 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 optional -
int$sort optional
Возвращает
selfstopWhen() public
stopWhen(callable|array $condition): self
Создает новую коллекцию, которая при итерации прекращает выдавать результаты, если предоставленное условие вычисляет true.
Это удобно для работы с бесконечными итераторами или любым генератором, который может начать возвращать недействительные элементы в определенный момент. Например, при чтении строк из потока файла вы можете остановить итерацию после достижения определенного значения.
Пример:
Получение массива строк в файле 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 optional
Возвращает
float|inttake() public
take(int $length = 1, int $offset = 0): self
Возвращает новую коллекцию с максимальным количеством $size элементов в порядке, в котором эта коллекция была создана. Если задан второй параметр, он определит, с какой позиции начинать извлечение элементов.
Параметры
-
int$length optional -
int$offset optional
Возвращает
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 optional
Возвращает
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 optional
Возвращает
selfunserialize() public
unserialize(string $collection): void
Десериализует переданную строку и восстанавливает экземпляр коллекции.
Параметры
-
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Подробное описание свойств
$_nestKey protected
Имя свойства, содержащего вложенные элементы для каждого элемента.
Тип
callable|string
© 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.Iterator.NestIterator.html