Spec-Zone.ru › CakePHP 4.3

Класс SortIterator

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

Пример:

$items = [$user1, $user2, $user3];
$sorted = new SortIterator($items, function ($user) {
 return $user->age;
});

// output all user name order by their age in descending order
foreach ($sorted as $user) {
 echo $user->name;
}

Этот итератор не сохраняет ключи, переданные в исходных элементах.

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

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

  • __construct() public

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

  • __debugInfo() public

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

  • __serialize() public

    Возвращает массив для сериализации этого объекта.

  • __unserialize() public

    Восстанавливает экземпляр Collection.

  • _createMatcherFilter() protected

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

  • _extract() protected

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

  • _propertyExtractor() protected

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

  • _simpleExtract() protected

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

  • append() public

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

  • appendItem() public

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

  • avg() public

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

  • buffered() public

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

  • cartesianProduct() public

    Создает новый набор, представляющий декартово произведение текущего набора.

  • chunk() public

    Разбивает набор на меньшие массивы заданного размера.

  • chunkWithKeys() public

    Разбивает коллекцию на меньшие массивы заданного размера.

  • combine() public

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

  • compile() public

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

  • contains() public

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

  • count() public

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

  • countBy() public

    Сортирует список на группы и возвращает количество элементов в каждой группе. Аналогично groupBy, но вместо возврата списка значений возвращает количество значений в этой группе.

  • countKeys() public

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

  • each() public

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

  • every() public

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

  • extract() public

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

  • filter() public

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

  • first() public

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

  • firstMatch() public

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

  • 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

    Возвращает новый набор.

  • optimizeUnwrap() protected

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

  • prepend() public

    Добавляет набор элементов в начало набора, создавая новый набор.

  • prependItem() public

    Добавляет один элемент в начало, создавая новый набор.

  • reduce() public

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

  • reject() public

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

  • sample() public

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

  • serialize() public

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

  • shuffle() public

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

  • skip() public

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

  • some() public

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

  • sortBy() public

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

  • stopWhen() public

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

  • sumOf() public

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

  • take() public

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

  • takeLast() public

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

  • through() public

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

  • toArray() public

    Возвращает массивное представление результатов.

  • toList() public

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

  • transpose() public

    Транспонирует строки и столбцы в столбцы и строки.

  • unfold() public

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

  • unserialize() public

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

  • unwrap() public

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

  • zip() public

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

  • zipWith() public

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

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

__construct() public

__construct(iterable $items, callable|string $callback, int $dir = \SORT_DESC, int $type = \SORT_NUMERIC)

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

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

Параметры

iterable $items

Значения для сортировки

callable|string $callback

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

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

либо SORT_DESC, либо SORT_ASC

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

тип сравнения, либо SORT_STRING, SORT_NUMERIC или SORT_NATURAL

__debugInfo() public

__debugInfo(): array<string, mixed>

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

Возвращает

array<string, mixed>

__serialize() public

__serialize(): array

Возвращает массив для сериализации этого объекта.

Возвращает

array

__unserialize() public

__unserialize(array $data): void

Перестраивает экземпляр Collection.

Параметры

array $data

Массив данных.

Возвращает

void

_createMatcherFilter() protected

_createMatcherFilter(array $conditions): Closure

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

Параметры

array $conditions

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

Возвращает

Closure

_extract() protected

_extract(ArrayAccess|array $data, array<string> $parts): mixed

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

Параметры

ArrayAccess|array $data

Данные.

array<string> $parts

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

Возвращает

mixed

_propertyExtractor() protected

_propertyExtractor(callable|string $path): callable

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

Параметры

callable|string $path

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

Возвращает

callable

_simpleExtract() protected

_simpleExtract(ArrayAccess|array $data, array<string> $parts): mixed

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

Параметры

ArrayAccess|array $data

Данные.

array<string> $parts

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

Возвращает

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(callable|string|null $path = null): float|int|null

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

Пример:

$items = [
 ['invoice' => ['total' => 100]],
 ['invoice' => ['total' => 200]]
];

$total = (new Collection($items))->avg('invoice.total');

// Total: 150

$total = (new Collection([1, 2, 3]))->avg();
// Total: 2

Среднее пустого набора или 0 строк — null. Коллекции с null значениями не считаются пустыми.

Параметры

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

Возвращает

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 $keepKeys = true): self

Разбивает коллекцию на меньшие массивы заданного размера.

Пример:

$items ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6];
$chunked = (new Collection($items))->chunkWithKeys(3)->toList();
// Returns [['a' => 1, 'b' => 2, 'c' => 3], ['d' => 4, 'e' => 5, 'f' => 6]]

Параметры

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

Возвращает

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 $keepKeys = true): self

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

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

Пример:

$collection->map($mapper)->sortBy('age')->extract('name');
$compiled = $collection->compile();
$isJohnHere = $compiled->some($johnMatcher);
$allButJohn = $compiled->filter($johnMatcher);

В приведенном выше примере, если бы коллекция не была скомпилирована предварительно, итерации для map, sortBy и extract выполнялись бы дважды: один раз для получения $isJohnHere и один раз для $allButJohn

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

Параметры

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

Возвращает

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

Обратный вызов получает значение и ключ тестируемого элемента и должен возвращать 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

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

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

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

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

Параметры

string $collection

Десериализованная коллекция

Возвращает

void

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

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

Spec-Zone.ru

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