Класс BufferedIterator
Создает итератор из другого итератора, который будет хранить результаты внутреннего итератора в памяти, чтобы результаты не приходилось пересчитывать.
Краткое описание свойств
- $_buffer protected
SplDoublyLinkedListКэш в памяти, содержащий результаты предыдущих итераторов
- $_current protected
mixedПоследняя запись, извлеченная из внутреннего итератора
- $_finished protected
boolУказывает, достиг ли внутренний итератор своего конца.
- $_index protected
intУказывает на номер следующей записи, которая должна быть извлечена
- $_key protected
mixedПоследний ключ, полученный от внутреннего итератора
- $_started protected
boolУказывает, был ли уже вызван метод rewind внутреннего итератора
Краткое описание методов
-
__construct() public
Сохраняет кэш результатов, полученных от внутреннего итератора, в оперативной памяти.
-
__debugInfo() public
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
-
_createMatcherFilter() protected
Возвращает вызываемый объект, который принимает значение и возвращает true, если оно соответствует определённому условию, и false в противном случае.
-
_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(). -
current() public
Возвращает текущую запись в итераторе.
-
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(), которые содержат только уникальные ключи. -
key() public
Возвращает текущий ключ в итераторе.
-
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
Возвращает новую коллекцию.
-
next() public
Перемещает указатель итератора к следующему элементу
-
optimizeUnwrap() protected
Распаковывает этот итератор и возвращает самый простой итерируемый объект, который можно использовать для извлечения данных.
-
prepend() public
Добавляет набор элементов в начало коллекции, создавая новую коллекцию.
-
prependItem() public
Добавляет один элемент в начало, создавая новую коллекцию.
-
reduce() public
Складывает значения в этой коллекции в одно значение, как результат применения функции обратного вызова ко всем элементам. $zero — начальное состояние сокращения, и каждый последующий шаг должен возвращаться функцией обратного вызова. Если $zero опущен, то будет использовано первое значение коллекции, и сокращение начнется со второго элемента.
-
reject() public
Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые не проходят проверку истинности. Это противоположно
filter. -
rewind() public
Перематывает коллекцию
-
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
Десериализует переданную строку и восстанавливает экземпляр BufferedIterator.
-
unwrap() public
Возвращает ближайший вложенный итератор, который можно безопасно пройти без потери каких-либо возможных преобразований. Это используется в основном для удаления пустых обёрток IteratorIterator, которые могут только замедлить процесс итерации.
-
valid() public
Возвращает, есть ли у итератора ещё элементы.
-
zip() public
Комбинирует элементы этой коллекции с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
-
zipWith() public
Комбинирует элементы этой коллекции с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
Подробное описание методов
__construct() public
__construct(iterable $items)
Сохраняет кэш результатов, полученных от внутреннего итератора, в оперативной памяти.
Параметры
-
iterable$items Элементы, которые будут отфильтрованы.
__debugInfo() public
__debugInfo(): array
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Возвращает
array_createMatcherFilter() protected
_createMatcherFilter(array $conditions): Closure
Возвращает вызываемый объект, который принимает значение и возвращает true, если оно соответствует определённому условию.
Параметры
-
array$conditions Список условий для соответствия, где ключ — путь к свойству текущего элемента, а значение — значение, с которым будет сравниваться элемент.
Возвращает
Closure_extract() protected
_extract(arrayArrayAccess $data, string[] $parts): mixed
Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащиеся в $path. Будет возвращать массивы для элементов, представленных {*}.
Параметры
-
arrayArrayAccess$data Данные.
-
string[]$parts Путь для извлечения.
Возвращает
mixed_propertyExtractor() protected
_propertyExtractor(string|callable $path): callable
Возвращает вызываемый объект, который может извлечь свойство или столбец из массива или объекта на основе пути, разделенного точками.
Параметры
-
string|callable$path Путь, разделённый точками, к столбцу, за которым необходимо следовать, чтобы вернуть последний, или вызываемый объект, который позаботится об этом.
Возвращает
callable_simpleExtract() protected
_simpleExtract(arrayArrayAccess $data, string[] $parts): mixed
Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащиеся в $path.
Параметры
-
arrayArrayAccess$data Данные.
-
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(string|callable|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 значениями не считаются пустыми.
Параметры
-
string|callable|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 $preserveKeys = 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$preserveKeys 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 $preserveKeys = 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$preserveKeys optional
Возвращает
selfcontains() public
contains(mixed $value): bool
Возвращает true, если $value присутствует в этой коллекции. Сравнения производятся по значению и типу.
Параметры
-
mixed$value
Возвращает
boolcount() public
count(): int
Возвращает количество элементов в этой коллекции
ПРЕДУПРЕЖДЕНИЯ:
Изменит текущую позицию итератора:
Вызов этого метода одновременно с итерацией по этой коллекции, например, в цикле foreach, приведёт к неопределённому поведению. Избегайте этого.
Потребляет все элементы для коллекций NoRewindIterator:
В некоторых типах коллекций вызов этого метода может сделать их непригодными для дальнейшего использования. То есть вы больше не сможете извлекать из них элементы или итерироваться по ним.
В частности, любая коллекция, оборачивающая генератор (функцию с оператором yield) или небуферизованный курсор базы данных, не будет принимать другие вызовы функций после вызова count().
Создайте новую коллекцию с помощью метода buffered() для решения этой проблемы.
Может сообщить о большем количестве элементов, чем уникальных ключей:
Любая коллекция, созданная путём добавления коллекций друг к другу или путём использования внутренних итераторов, возвращающих дубликаты ключей, будет сообщать о большем количестве элементов с помощью этой функции, чем конечное количество элементов при преобразовании коллекции в именованный массив. Это связано с тем, что дубликаты ключей будут объединены в один в итоговом массиве, тогда как этот метод count учитывает только количество элементов после преобразования в простой список.
Если вам нужно количество элементов с учётом ключей (количество уникальных ключей), вы можете вызвать countKeys()
Returns
intcountBy() public
countBy(callable|string $path): self
Сортирует список в группы и возвращает количество элементов в каждой группе. Аналогично groupBy, но вместо возврата списка значений возвращает количество значений в этой группе.
Когда $callback является строкой, это должно быть имя свойства для извлечения или путь, разделённый точками, к свойствам, которые должны быть пройдены для получения последнего в пути.
Example:
$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
]; Parameters
-
callable|string$path
Returns
selfcountKeys() public
countKeys(): int
Возвращает количество уникальных ключей в этом итераторе. Это то же самое, что и количество элементов, которые будет содержать коллекция после вызова toArray()
Этот метод имеет ряд предостережений. Подробнее см. CollectionInterface::count().
Returns
intcurrent() public
current(): mixed
Возвращает текущую запись в итераторе
Returns
mixedeach() public
each(callable $callback): $this
Применяет обратный вызов к элементам в этой коллекции.
Example:
$collection = (new Collection($items))->each(function ($value, $key) {
echo "Element $key: $value";
}); Parameters
-
callable$callback
Returns
$thisevery() public
every(callable $callback): bool
Возвращает true, если все значения в этой коллекции проходят проверку истинности, указанную в обратном вызове.
Каждый раз при выполнении обратного вызова он будет получать значение элемента в текущей итерации и ключ элемента в качестве аргументов в указанном порядке.
Example:
$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) {
return $value > 21;
}); Пустые коллекции всегда возвращают true, поскольку это пустая истина.
Parameters
-
callable$callback
Returns
boolextract() public
extract(string|callable $path): self
Возвращает новую коллекцию, содержащую значение столбца или свойства, найденное в каждом из элементов.
Сопоставитель может быть строкой с именем свойства для извлечения или путём, разделённым точками, к свойствам, которые должны быть пройдены для получения последнего в пути.
Если столбец или свойство не могут быть найдены для определённого элемента в коллекции, эта позиция заполняется значением null.
Example:
Извлечь имя пользователя для всех комментариев в массиве:
$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] Parameters
-
string|callable$path
Returns
selffilter() public
filter(callable|null $callback = null): self
Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые проходят проверку истинности. Только значения, для которых обратный вызов возвращает true, будут присутствовать в результирующей коллекции.
Каждый раз при выполнении обратного вызова он будет получать значение элемента в текущей итерации, ключ элемента и эту коллекцию в качестве аргументов в указанном порядке.
Example:
Фильтрация нечётных чисел в массиве, в конце только значение 2 будет присутствовать в результирующей коллекции:
$collection = (new Collection([1, 2, 3]))->filter(function ($value, $key) {
return $value % 2 === 0;
}); Parameters
-
callable|null$callback optional
Returns
selffirst() public
first(): mixed
Возвращает первый результат в этой коллекции
Returns
mixedfirstMatch() public
firstMatch(array $conditions): mixed
Возвращает первый результат, соответствующий всем парам ключ-значение, перечисленным в условиях.
Parameters
-
array$conditions
Returns
mixedgroupBy() public
groupBy(callable|string $path): self
Разделяет коллекцию на наборы, сгруппированные по результату выполнения каждого значения через обратный вызов. Если $callback является строкой, а не вызываемым объектом, группирует по свойству, указанному $callback, для каждого из значений.
Когда $callback является строкой, это должно быть имя свойства для извлечения или путь, разделённый точками, к свойствам, которые должны быть пройдены для получения последнего в пути.
Example:
$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],
]
]; Parameters
-
callable|string$path
Returns
selfindexBy() public
indexBy(callable|string $path): self
Учитывая список и функцию обратного вызова, которая возвращает ключ для каждого элемента в списке (или имя свойства), возвращает объект с индексом каждого элемента. То же самое, что и groupBy, но для случаев, когда вы знаете, что ваши ключи уникальны.
Когда $callback является строкой, это должно быть имя свойства для извлечения или путь, разделённый точками, к свойствам, которые должны быть пройдены для получения последнего в пути.
Example:
$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'],
]; Parameters
-
callable|string$path
Returns
selfinsert() public
insert(string $path, mixed $values): self
Возвращает новую коллекцию, содержащую каждый из элементов, найденных в $values, в качестве свойства внутри соответствующих элементов в этой коллекции. Свойство, куда будут вставлены значения, описывается параметром $path.
$path может быть строкой с именем свойства или путём, разделённым точками, к свойствам, которые должны быть пройдены для получения последнего в пути.
Если столбец или свойство не могут быть найдены для определённого элемента в коллекции как часть пути, элемент останется неизменённым.
Example:
Вставить возраст в коллекцию, содержащую пользователей:
$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]]
]; Parameters
-
string$path -
mixed$values
Returns
selfisEmpty() public
isEmpty(): bool
Возвращает, есть ли элементы в этой коллекции
Example:
$items [1, 2, 3]; (new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true
Returns
booljsonSerialize() public
jsonSerialize(): array
Возвращает данные, которые могут быть преобразованы в JSON. Возвращает те же данные, что и toArray(), которые содержат только уникальные ключи.
Часть интерфейса JsonSerializable.
Returns
arraykey() public
key(): mixed
Возвращает текущий ключ в итераторе
Returns
mixedlast() public
last(): mixed
Возвращает последний результат в этой коллекции
Returns
mixedlazy() public
lazy(): self
Возвращает новую коллекцию, где любые операции, присоединённые после неё, гарантированно выполняются лениво. То есть элементы будут возвращаться по одному.
Ленивую коллекцию можно перебирать только один раз. Вторая попытка приводит к ошибке.
Возвращает
selflistNested() public
listNested(string|int $order = 'desc', string|callable $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 необязательно -
string|callable$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(string|callable|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 значениями не считаются пустыми.
Параметры
-
string|callable|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\CollectionInterfacenext() public
next(): void
Перемещает указатель итератора к следующему элементу
Возвращает
voidoptimizeUnwrap() 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
Возвращает
selfrewind() public
rewind(): void
Перематывает коллекцию
Возвращает
voidsample() 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, если какие-либо значения в этой коллекции проходят проверку истинности, указанную в обратном вызове.
Каждый раз при выполнении обратного вызова он будет получать значение элемента в текущей итерации и ключ элемента в качестве аргументов в указанном порядке.
Пример:
$hasYoungPeople = (new Collection([24, 45, 15]))->every(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(string|callable|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 Параметры
-
string|callable|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 $preserveKeys = true): array
Возвращает массивное представление результатов
Параметры
-
bool$preserveKeys необязательно
Возвращает
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
Десериализует переданную строку и восстанавливает экземпляр BufferedIterator
Параметры
-
string$collection Сериализованный буферизованный итератор
Возвращает
voidunwrap() public
unwrap(): Traversable
Возвращает ближайший вложенный итератор, который можно безопасно проходить, не теряя никаких возможных преобразований. Это используется главным образом для удаления пустых обёрток IteratorIterator, которые могут только замедлять процесс итерации.
Возвращает
Traversablevalid() public
valid(): bool
Возвращает, есть ли у итератора дополнительные элементы
Возвращает
boolzip() 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Подробное описание свойств
$_buffer защищенное
Кэш в оперативной памяти, содержащий результаты предыдущих итераторов
Тип
SplDoublyLinkedList$_current защищенное
Последняя запись, извлеченная из внутреннего итератора
Тип
mixed$_finished защищенное
Достиг ли внутренний итератор конца.
Тип
bool$_index защищенное
Указатель на следующий номер записи, который должен быть извлечен
Тип
int$_key защищенное
Последний ключ, полученный от внутреннего итератора
Тип
mixed$_started защищенное
Вызывался ли метод перемотки внутреннего итератора
Тип
bool
© 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.2/class-Cake.Collection.Iterator.BufferedIterator.html