Spec-Zone.ru › CakePHP 4.4

Класс BufferedIterator

Создаёт итератор из другого итератора, который будет сохранять результаты внутреннего итератора в памяти, чтобы результаты не нужно было пересчитывать.

Пространство имён: Cake\Collection\Iterator

Краткое описание свойств

  • $_buffer protected
    SplDoublyLinkedList

    Кэш в памяти, содержащий результаты предыдущих итераторов

  • $_current protected
    mixed

    Последняя запись, полученная от внутреннего итератора

  • $_finished protected
    bool

    Указывает, достиг ли внутренний итератор своего конца.

  • $_index protected
    int

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

  • $_key protected
    mixed

    Последний ключ, полученный от внутреннего итератора

  • $_started protected
    bool

    Указывает, был ли уже вызван метод rewind внутреннего итератора

Краткое описание методов

  • __construct() public

    Поддерживает кэш результатов, полученных от внутреннего итератора, в памяти.

  • __debugInfo() public

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

  • __serialize() public

    Магический метод, используемый для сериализации экземпляра итератора.

  • __unserialize() public

    Магический метод, используемый для восстановления экземпляра итератора.

  • _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().

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

Поддерживает кэш в оперативной памяти результатов, выдаваемых внутренним итератором.

Parameters

iterable $items

Элементы, которые нужно отфильтровать.

__debugInfo() public

__debugInfo(): array<string, mixed>

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

Returns

array<string, mixed>

__serialize() public

__serialize(): array

Магический метод, используемый для сериализации экземпляра итератора.

Returns

array

__unserialize() public

__unserialize(array $data): void

Магический метод, используемый для воссоздания экземпляра итератора.

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

mixed

append() public

append(iterable $items): self

Возвращает новую коллекцию как результат конкатенации списка элементов в этой коллекции со переданным списком элементов

Parameters

iterable $items

Returns

self

appendItem() public

appendItem(mixed $item, mixed $key = null): self

Добавляет один элемент, создавая новую коллекцию.

Parameters

mixed $item
mixed $key optional

Returns

self

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

buffered() public

buffered(): self

Возвращает новую коллекцию, в которой выполняются операции, выполняемые этой коллекцией. Независимо от того, сколько раз выполняется итерация новой коллекции, эти операции будут выполнены только один раз.

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

Returns

self

cartesianProduct() 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\CollectionInterface

Throws

LogicException

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

self

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

self

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

self

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

self

contains() public

contains(mixed $value): bool

Возвращает true, если $value присутствует в этой коллекции. Сравнения выполняются как по значению, так и по типу.

Parameters

mixed $value

Returns

bool

count() public

count(): int

Возвращает количество элементов в этой коллекции

ПРЕДУПРЕЖДЕНИЯ:

Изменит текущую позицию итератора:

Вызов этого метода одновременно с итерацией по этой коллекции, например, в цикле foreach, приведёт к неопределённому поведению. Избегайте этого.

Потребляет все элементы для коллекций NoRewindIterator:

В определённых типах коллекций вызов этого метода может сделать их непригодными для дальнейшего использования. То есть вы больше не сможете извлекать из них элементы или итерироваться по ним.

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

Создайте новую коллекцию с помощью метода buffered(), чтобы обойти эту проблему.

Может сообщить о большем количестве элементов, чем уникальных ключей:

Любая коллекция, созданная путём объединения коллекций или имеющая внутренние итераторы, возвращающие дубликаты ключей, сообщит о большем количестве элементов с помощью этой функции, чем окончательное количество элементов при преобразовании коллекции в именованный массив. Это связано с тем, что дубликаты ключей будут объединены в один в итоговом массиве, тогда как этот метод count учитывает только количество элементов после преобразования его в простой список.

Если вам нужно количество элементов с учётом ключей (количество уникальных ключей), вы можете вызвать countKeys()

Возвращает

int

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

Возвращает

self

countKeys() public

countKeys(): int

Возвращает количество уникальных ключей в этом итераторе. Это то же самое, что и количество элементов, которые будет содержать коллекция после вызова toArray()

Этот метод имеет ряд предостережений. Подробности см. в CollectionInterface::count().

Возвращает

int

current() public

current(): mixed

Возвращает текущую запись в итераторе

Возвращает

mixed

each() public

each(callable $callback): $this

Применяет обратный вызов к элементам в этой коллекции.

Пример:

$collection = (new Collection($items))->each(function ($value, $key) {
 echo "Element $key: $value";
});

Параметры

callable $callback

Возвращает

$this

every() public

every(callable $callback): bool

Возвращает true, если все значения в этой коллекции проходят проверку истинности, указанную в обратном вызове.

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

Пример:

$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) {
 return $value > 21;
});

Пустые коллекции всегда возвращают true.

Параметры

callable $callback

Возвращает

bool

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

Возвращает

self

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

Возвращает

self

first() public

first(): mixed

Возвращает первый результат в этой коллекции

Возвращает

mixed

firstMatch() public

firstMatch(array $conditions): mixed

Возвращает первый результат, соответствующий всем парам ключ-значение, указанным в условиях.

Параметры

array $conditions

Возвращает

mixed

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

Возвращает

self

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

Возвращает

self

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

Возвращает

self

isEmpty() public

isEmpty(): bool

Возвращает, есть ли элементы в этой коллекции

Пример:

$items [1, 2, 3];
(new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true

Возвращает

bool

jsonSerialize() public

jsonSerialize(): array

Возвращает данные, которые могут быть преобразованы в JSON. Возвращает те же данные, что и toArray(), которые содержат только уникальные ключи.

Часть интерфейса JsonSerializable.

Возвращает

array

key() public

key(): mixed

Возвращает текущий ключ в итераторе

Возвращает

mixed

last() public

last(): mixed

Возвращает последний результат в этой коллекции

Возвращает

mixed

lazy() public

lazy(): self

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

Коллекция, обработанная лениво, может быть проитерирована только один раз. Вторая попытка приведёт к ошибке.

Возвращает

self

listNested() 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 необязательно

Возвращает

self

map() public

map(callable $callback): self

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

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

Пример:

Получение коллекции булевых значений, где true указывает, является ли человек женщиной:

$collection = (new Collection($people))->map(function ($person, $key) {
 return $person->gender === 'female';
});

Параметры

callable $callback

Возвращает

self

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

Возвращает

self

max() 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 необязательно

Возвращает

mixed

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

min() 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 необязательно

Возвращает

mixed

nest() public

nest(callable|string $idPath, callable|string $parentPath, string $nestingKey = 'children'): self

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

Параметры

callable|string $idPath
callable|string $parentPath
string $nestingKey необязательно

Возвращает

self

newCollection() protected

newCollection(mixed ...$args): Cake\Collection\CollectionInterface

Возвращает новую коллекцию.

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

Параметры

mixed ...$args

Аргументы конструктора.

Возвращает

Cake\Collection\CollectionInterface

next() public

next(): void

Перемещает указатель итератора к следующему элементу

Возвращает

void

optimizeUnwrap() protected

optimizeUnwrap(): iterable

Разворачивает эту итерацию и возвращает самую простую итерируемую последовательность, которая может быть использована для извлечения данных.

Возвращает

iterable

prepend() public

prepend(mixed $items): self

Добавляет набор элементов в начало коллекции, создавая новую коллекцию.

Параметры

mixed $items

Возвращает

self

prependItem() public

prependItem(mixed $item, mixed $key = null): self

Добавляет один элемент в начало, создавая новую коллекцию.

Параметры

mixed $item
mixed $key необязательно

Возвращает

self

reduce() public

reduce(callable $callback, mixed $initial = null): mixed

Сворачивает значения в этой коллекции до одного значения, как результат применения функции обратного вызова ко всем элементам. $zero — начальное состояние сворачивания, и каждый последующий шаг должен возвращаться функцией обратного вызова. Если $zero опущен, первое значение коллекции будет использоваться вместо него, а сворачивание начнется со второго элемента.

Параметры

callable $callback
mixed $initial необязательно

Возвращает

mixed

reject() public

reject(callable $callback): self

Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые не проходят проверку истинности. Это противоположно filter.

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

Пример:

Фильтрация чётных чисел в массиве, в итоге в результирующей коллекции будут только значения 1 и 3:

$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) {
 return $value % 2 === 0;
});

Параметры

callable $callback

Возвращает

self

rewind() public

rewind(): void

Перематывает коллекцию

Возвращает

void

sample() public

sample(int $length = 10): self

Возвращает новую коллекцию с максимальным количеством $size случайных элементов из этой коллекции

Параметры

int $length необязательно

Возвращает

self

serialize() public

serialize(): string

Возвращает строковое представление этого объекта, которое можно использовать для его реконструкции

Возвращает

string

shuffle() public

shuffle(): self

Возвращает новую коллекцию с элементами в случайном порядке, эта функция не сохраняет исходные ключи в коллекции.

Возвращает

self

skip() public

skip(int $length): self

Возвращает новую коллекцию, которая пропустит указанное количество элементов в начале итерации.

Параметры

int $length

Возвращает

self

some() public

some(callable $callback): bool

Возвращает true, если какие-либо значения в этой коллекции проходят проверку, заданную в обратном вызове.

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

Пример:

$hasYoungPeople = (new Collection([24, 45, 15]))->some(function ($value, $key) {
 return $value < 21;
});

Параметры

callable $callback

Возвращает

bool

sortBy() 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 необязательно

Возвращает

self

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

Возвращает

self

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

take() public

take(int $length = 1, int $offset = 0): self

Возвращает новую коллекцию с максимальным количеством $size элементов в внутреннем порядке, в котором эта коллекция была создана. Если второй параметр передан, он определит, с какой позиции начинать извлечение элементов.

Параметры

int $length необязательно
int $offset необязательно

Возвращает

self

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

Возвращает

self

through() public

through(callable $callback): self

Пропускает эту коллекцию через вызываемый объект в качестве первого аргумента. Это полезно для декорирования всей коллекции другим объектом.

Пример:

$items = [1, 2, 3];
$decorated = (new Collection($items))->through(function ($collection) {
     return new MyCustomCollection($collection);
});

Параметры

callable $callback

Возвращает

self

toArray() public

toArray(bool $keepKeys = true): array

Возвращает массив результатов

Параметры

bool $keepKeys необязательно

Возвращает

array

toList() public

toList(): array

Возвращает массив результатов с числовыми индексами. Это эквивалентно вызову toArray(false)

Возвращает

array

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

Исключения

LogicException

unfold() 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 необязательно

Возвращает

self

unserialize() public

unserialize(string $collection): void

Десериализует переданную строку и восстанавливает экземпляр BufferedIterator

Параметры

string $collection

Сериализованный буферизованный итератор

Возвращает

void

unwrap() public

unwrap(): Traversable

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

Возвращает

Traversable

valid() public

valid(): bool

Возвращает, есть ли у итератора больше элементов

Возвращает

bool

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

Возвращает

self

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

Кэш в памяти, содержащий результаты из предыдущих итераторов

Тип

SplDoublyLinkedList

$_current protected

Последняя запись, извлеченная из внутреннего итератора

Тип

mixed

$_finished protected

Указывает, достиг ли внутренний итератор своего конца.

Тип

bool

$_index protected

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

Тип

int

$_key protected

Последний ключ, полученный от внутреннего итератора

Тип

mixed

$_started protected

Указывает, был ли уже вызван метод перемотки внутреннего итератора

Тип

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.4/class-Cake.Collection.Iterator.BufferedIterator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API