Spec-Zone.ru › CakePHP 4.2

Класс TreeIterator

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

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

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

  • $_mode protected
    int

    Режим итерации

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

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

  • each() public

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

  • every() public

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

  • extract() public

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

  • filter() public

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

  • first() public

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

  • firstMatch() public

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

  • groupBy() public

    Разбивает коллекцию на наборы, сгруппированные по результату выполнения каждого значения через обратный вызов. Если $callback является строкой вместо вызываемого объекта, группирует по свойству, названному $callback, для каждого из значений.

  • indexBy() public

    На основе списка и функции обратного вызова, возвращающей ключ для каждого элемента в списке (или имя свойства), возвращает объект с индексом каждого элемента. Аналогично groupBy, но для случая, когда вы знаете, что ваши ключи уникальны.

  • insert() public

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

  • isEmpty() public

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

  • jsonSerialize() public

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

  • last() public

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

  • lazy() public

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

  • listNested() public

    Возвращает новую коллекцию с каждым из элементов этой коллекции после сплющивания структуры дерева. Структура дерева определяется вложенностью элементов под ключом с известным именем. Указать такое имя можно, используя параметр '$nestingKey'.

  • map() public

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

  • match() public

    Просматривает каждое значение в списке, возвращая коллекцию всех значений, которые содержат все пары ключ-значение, перечисленные в $conditions.

  • max() public

    Возвращает самый верхний элемент в этой коллекции после сортировки по свойству. См. метод sortBy для получения информации о обратном вызове и параметре $sort.

  • median() public

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

  • min() public

    Возвращает самый нижний элемент в этой коллекции после сортировки по свойству. См. метод sortBy для получения информации о обратном вызове и параметре $sort.

  • nest() public

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

  • newCollection() protected

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

END_OF_DOCUMENT_MARKER
  • optimizeUnwrap() protected

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

  • prepend() public

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

  • prependItem() public

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

  • printer() public

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

  • reduce() public

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

  • reject() public

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

  • sample() public

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

  • 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

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

  • unwrap() public

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

  • zip() public

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

  • zipWith() public

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

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

__construct() public

__construct(RecursiveIterator $items, int $mode = RecursiveIteratorIterator::SELF_FIRST, int $flags = 0)

Конструктор

Параметры

RecursiveIterator $items

Итератор для сглаживания.

int $mode optional

Режим итератора.

int $flags optional

Флаги итератора.

_createMatcherFilter() protected

_createMatcherFilter(array $conditions): Closure

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

Параметры

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

Путь для извлечения.

Возвращает

mixed

append() public

append(iterable $items): self

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

Параметры

iterable $items

Возвращает

self

appendItem() public

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

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

Параметры

mixed $item
mixed $key optional

Возвращает

self

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

buffered() public

buffered(): self

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

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

Возвращает

self

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

Выбрасывает

LogicException

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

Возвращает

self

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

Возвращает

self

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

Возвращает

self

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

Возвращает

self

contains() public

contains(mixed $value): bool

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

Параметры

mixed $value

Возвращает

bool

count() public

count(): int

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

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

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

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

Использует все элементы для коллекций NoRewindIterator:

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

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

Конкретно, любые коллекции, обертывающие генератор (функцию с оператором 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

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

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

Пример:

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

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

Параметры

callable $callback

Возвращает

bool

extract() public

extract(string|callable $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]

Параметры

string|callable $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

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

Пример:

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

Возвращает

bool

jsonSerialize() public

jsonSerialize(): array

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

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

Возвращает

array

last() public

last(): mixed

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

Возвращает

mixed

lazy() public

lazy(): self

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

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

Возвращает

self

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

Возвращает

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

Возвращает верхний элемент в этой коллекции после сортировки по свойству. Сведения о коллбэке и параметре $sort см. в методе sortBy.

Примеры:

// 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(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|null

min() public

min(callable|string $path, int $sort = \SORT_NUMERIC): mixed

Возвращает нижний элемент в этой коллекции после сортировки по свойству. Сведения о коллбэке и параметре $sort см. в методе sortBy.

Примеры:

// 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

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

printer() public

printer(string|callable $valuePath, string|callable|null $keyPath = null, string $spacer = '__'): Cake\Collection\Iterator\TreePrinter

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

Как $valuePath, так и $keyPath могут быть строкой со значением свойства для извлечения или точкой, отделяющей путь к свойствам, которые необходимо проследить, чтобы получить последнее на пути.

В качестве альтернативы, $valuePath и $keyPath могут быть вызываемыми функциями. Они получат текущий элемент в качестве первого параметра, текущий ключ итерации — во втором, и экземпляр итератора — в третьем.

Пример

$printer = (new Collection($treeStructure))->listNested()->printer('name');

Использование лямбда-функции:

$printer = (new Collection($treeStructure))
     ->listNested()
     ->printer(function ($item, $key, $iterator) {
         return $item->name;
     });

Параметры

string|callable $valuePath

Свойство для извлечения или вызываемая функция для возврата значения для отображения

string|callable|null $keyPath необязательный

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

string $spacer необязательный

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

Возвращает

Cake\Collection\Iterator\TreePrinter

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

sample() public

sample(int $length = 10): self

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

Параметры

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

Возвращает

self

shuffle() public

shuffle(): self

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

Возвращает

self

skip() public

skip(int $length): self

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

Параметры

int $length

Возвращает

self

some() public

some(callable $callback): bool

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

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

Пример:

$hasYoungPeople = (new Collection([24, 45, 15]))->every(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 optional
int $sort optional

Возвращает

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

Возвращает

float|int

take() public

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

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

Параметры

int $length optional
int $offset optional

Возвращает

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 $preserveKeys = true): array

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

Параметры

bool $preserveKeys optional

Возвращает

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 optional

Возвращает

self

unwrap() public

unwrap(): Traversable

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

Возвращает

Traversable

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

Подробности свойств

$_mode protected

Режим итерации

Тип

int

© 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.TreeIterator.html

Spec-Zone.ru

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