Spec-Zone.ru › CakePHP 4.2

Class TreePrinter

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

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

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

  • $_current protected
    mixed

    Кэшированное значение для текущего элемента итерации

  • $_key protected
    callable

    Делегат для генерации ключа итерации

  • $_spacer protected
    string

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

  • $_value protected
    callable

    Делегат для извлечения значения для отображения

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

  • __construct() public

    Конструктор

  • _createMatcherFilter() protected

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

  • _extract() protected

    Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащихся в $path. Возвращает массивы для элементов, представленных {*}

  • _fetchCurrent() protected

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

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

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

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

  • 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, string|callable $valuePath, string|callable $keyPath, string $spacer, int $mode = RecursiveIteratorIterator::SELF_FIRST)

Конструктор

Параметры

RecursiveIterator $items

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

string|callable $valuePath

Свойство для извлечения или вызываемый объект для возвращения значения отображения.

string|callable $keyPath

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

string $spacer

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

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

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

_createMatcherFilter() protected

_createMatcherFilter(array $conditions): Closure

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

Параметры

array $conditions

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

Возвращает

Closure

_extract() protected

_extract(arrayArrayAccess $data, string[] $parts): mixed

Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащиеся в $path. Будут возвращены массивы для элементов, представленных {*}

Параметры

arrayArrayAccess $data

Данные.

string[] $parts

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

Возвращает

mixed

_fetchCurrent() protected

_fetchCurrent(): mixed

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

Возвращает

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

Возвращает

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

Возвращает

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

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

callable|null $filter необязательно

Обратный вызов фильтрации, который должен возвращать 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 необязательно

Возвращает

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

Возвращает

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

Возвращает

self

contains() public

contains(mixed $value): bool

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

Параметры

mixed $value

Возвращает

bool

count() public

count(): int

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

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

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

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

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

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

В частности, любая коллекция, использующая генератор (функция с оператором 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(): string

Возвращает текущее значение итерации

Возвращает

string

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

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

Пример:

$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', 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

Возвращает верхний элемент в этой коллекции после сортировки по свойству. См. метод 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(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

Возвращает нижний элемент в этой коллекции после сортировки по свойству. См. метод 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

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

Подробное описание свойств

$_current protected

Кэшированное значение для текущего элемента итерации

Тип

mixed

$_key protected

Функция для генерации ключа итерации

Тип

callable

$_spacer protected

Строка для префикса значений в соответствии с их уровнем в дереве.

Тип

string

$_value protected

Функция для извлечения отображаемого значения

Тип

callable

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

Spec-Zone.ru

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