Класс 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;
} Этот итератор не сохраняет ключи, переданные в исходных элементах.
Краткое описание методов
-
__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 Путь для извлечения.
Возвращает
mixedappend() public
append(iterable $items): self
Возвращает новую коллекцию в результате конкатенации списка элементов в этой коллекции со списком переданных элементов
Параметры
-
iterable$items
Возвращает
selfappendItem() public
appendItem(mixed $item, mixed $key = null): self
Добавляет один элемент, создавая новую коллекцию.
Параметры
-
mixed$item -
mixed$key необязательно
Возвращает
selfavg() 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|nullbuffered() public
buffered(): self
Возвращает новую коллекцию, где операции, выполняемые этой коллекцией, выполняются только один раз, независимо от того, сколько раз новая коллекция будет итерироваться.
Это также может использоваться для того, чтобы сделать любой неперематываемый итератор перематываемым.
Возвращает
selfcartesianProduct() public
cartesianProduct(callable|null $operation = null, callable|null $filter = null): Cake\Collection\CollectionInterface
Создайте новую коллекцию, которая является декартовым произведением текущей коллекции
Для создания декартова произведения коллекция должна содержать одномерные данные.
Пример
$collection = new Collection([['A', 'B', 'C'], [1, 2, 3]]);
$result = $collection->cartesianProduct()->toArray();
$expected = [
['A', 1],
['A', 2],
['A', 3],
['B', 1],
['B', 2],
['B', 3],
['C', 1],
['C', 2],
['C', 3],
]; Параметры
-
callable|null$operation необязательно Вызываемый объект, позволяющий настроить результат произведения.
-
callable|null$filter необязательно Обработчик фильтрации, который должен возвращать true, чтобы результат был частью конечного результата.
Возвращает
Cake\Collection\CollectionInterfaceИсключения
LogicExceptionchunk() public
chunk(int $chunkSize): self
Разбивает коллекцию на меньшие массивы заданного размера.
Пример:
$items [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; $chunked = (new Collection($items))->chunk(3)->toList(); // Returns [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]
Параметры
-
int$chunkSize
Возвращает
selfchunkWithKeys() public
chunkWithKeys(int $chunkSize, bool $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 необязательно
Возвращает
selfcombine() public
combine(callable|string $keyPath, callable|string $valuePath, callable|string|null $groupPath = null): self
Возвращает новую коллекцию, где значения извлекаются на основе пути к значению, а затем индексируются по пути к ключу. Дополнительно этот метод может создавать родительские группы на основе пути к свойству группы.
Примеры:
$items = [
['id' => 1, 'name' => 'foo', 'parent' => 'a'],
['id' => 2, 'name' => 'bar', 'parent' => 'b'],
['id' => 3, 'name' => 'baz', 'parent' => 'a'],
];
$combined = (new Collection($items))->combine('id', 'name');
// Result will look like this when converted to array
[
1 => 'foo',
2 => 'bar',
3 => 'baz',
];
$combined = (new Collection($items))->combine('id', 'name', 'parent');
// Result will look like this when converted to array
[
'a' => [1 => 'foo', 3 => 'baz'],
'b' => [2 => 'bar']
]; Параметры
-
callable|string$keyPath -
callable|string$valuePath -
callable|string|null$groupPath необязательно
Возвращает
selfcompile() 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 необязательно
Возвращает
selfcontains() public
contains(mixed $value): bool
Возвращает true, если $value присутствует в этой коллекции. Сравнения производятся по значению и типу.
Параметры
-
mixed$value
Возвращает
boolcount() public
count(): int
Возвращает количество элементов в коллекции.
ПРЕДУПРЕЖДЕНИЯ:
Изменяет текущую позицию итератора:
Вызов этого метода во время итерации по этой коллекции, например, в цикле foreach, приведёт к неопределённому поведению. Избегайте этого.
Использует все элементы для коллекций NoRewindIterator:
Для определённых типов коллекций вызов этого метода может сделать их непригодными для дальнейшего использования. То есть, вы больше не сможете извлекать элементы или итерироваться по ним.
Для решения этой проблемы создайте новую коллекцию с помощью метода buffered().
Конкретно, любые коллекции, которые обертывают генератор (функцию с оператором yield) или небуферизованный курсор базы данных, не будут принимать другие вызовы функций после вызова count() на них.
Создайте новую коллекцию с помощью метода buffered() для решения этой проблемы.
Может возвращать больше элементов, чем уникальных ключей:
Любая коллекция, созданная путём объединения других коллекций или содержащая внутренние итераторы, возвращающие дублирующие ключи, будет возвращать больше элементов с помощью этой функции, чем фактическое количество элементов после преобразования коллекций в массив с ключами. Это происходит потому, что дублирующие ключи сводятся к одному в конечном массиве, в то время как этот метод count учитывает только количество элементов после преобразования в обычный список.
Если вам нужно количество элементов, учитывая ключи (количество уникальных ключей), вы можете вызвать countKeys().
Возвращает
intcountBy() 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
Возвращает
selfcountKeys() public
countKeys(): int
Возвращает количество уникальных ключей в этом итераторе. Это то же самое, что и количество элементов, которые будет содержать коллекция после вызова toArray()
Этот метод имеет ряд ограничений. Подробности см. в CollectionInterface::count()
Возвращает
inteach() public
each(callable $callback): $this
Применяет обратный вызов к элементам в этой коллекции.
Пример:
$collection = (new Collection($items))->each(function ($value, $key) {
echo "Element $key: $value";
}); Параметры
-
callable$callback
Возвращает
$thisevery() public
every(callable $callback): bool
Возвращает true, если все значения в этой коллекции проходят проверку на истинность, заданную в обратном вызове.
Обратный вызов получает значение и ключ тестируемого элемента и должен возвращать true, если проверка пройдена.
Пример:
$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) {
return $value > 21;
}); Пустые коллекции всегда возвращают true.
Параметры
-
callable$callback
Возвращает
boolextract() 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
Возвращает
selffilter() 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
Возвращает
selffirst() public
first(): mixed
Возвращает первый результат в этой коллекции
Возвращает
mixedfirstMatch() public
firstMatch(array $conditions): mixed
Возвращает первый результат, соответствующий всем парам «ключ-значение», перечисленным в условиях.
Параметры
-
array$conditions
Возвращает
mixedgroupBy() 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
Возвращает
selfindexBy() 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
Возвращает
selfinsert() 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
Возвращает
selfisEmpty() public
isEmpty(): bool
Возвращает, есть ли элементы в этой коллекции
Пример:
$items [1, 2, 3]; (new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true
Возвращает
booljsonSerialize() public
jsonSerialize(): array
Возвращает данные, которые можно преобразовать в JSON. Это возвращает те же данные, что и toArray(), которые содержат только уникальные ключи.
Часть интерфейса JsonSerializable.
Возвращает
arraylast() public
last(): mixed
Возвращает последний результат в этом наборе.
Возвращает
mixedlazy() public
lazy(): self
Возвращает новый набор, где любые операции, присоединённые после него, гарантированно выполняются лениво. То есть, элементы будут выводиться по одному.
Ленивый набор может быть итерациирован только один раз. Вторая попытка приводит к ошибке.
Возвращает
selflistNested() 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 необязательный
Возвращает
selfmap() public
map(callable $callback): self
Возвращает другую коллекцию после модификации каждого значения в этой коллекции с помощью предоставленного вызываемого объекта.
Каждый раз, когда вызываемый объект выполняется, он получает значение элемента в текущей итерации, ключ элемента и эту коллекцию в качестве аргументов в указанном порядке.
Пример:
Получение коллекции булевых значений, где true указывает, является ли человек женщиной:
$collection = (new Collection($people))->map(function ($person, $key) {
return $person->gender === 'female';
}); Параметры
-
callable$callback
Возвращает
selfmatch() public
match(array $conditions): self
Просматривает каждое значение в списке, возвращая коллекцию всех значений, содержащих все пары ключ-значение, перечисленные в $conditions.
Пример:
$items = [ ['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']], ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]; $extracted = (new Collection($items))->match(['user.name' => 'Renan']); // Result will look like this when converted to array [ ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]
Параметры
-
array$conditions
Возвращает
selfmax() public
max(callable|string $path, int $sort = \SORT_NUMERIC): mixed
Возвращает верхний элемент в этой коллекции после сортировки по свойству. См. метод sortBy для получения информации о вызываемом объекте и параметре $sort.
Примеры:
// For a collection of employees
$max = $collection->max('age');
$max = $collection->max('user.salary');
$max = $collection->max(function ($e) {
return $e->get('user')->get('salary');
});
// Display employee name
echo $max->name; Параметры
-
callable|string$path -
int$sort необязательно
Возвращает
mixedmedian() public
median(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|nullmin() public
min(callable|string $path, int $sort = \SORT_NUMERIC): mixed
Возвращает нижний элемент в этом наборе после сортировки по свойству. Проверьте метод sortBy для получения информации о коллбэке и параметре $sort.
Примеры:
// For a collection of employees
$min = $collection->min('age');
$min = $collection->min('user.salary');
$min = $collection->min(function ($e) {
return $e->get('user')->get('salary');
});
// Display employee name
echo $min->name; Параметры
-
callable|string$path -
int$sort необязательно
Возвращает
mixednest() public
nest(callable|string $idPath, callable|string $parentPath, string $nestingKey = 'children'): self
Возвращает новый набор, где значения вложены в структуру дерева, основанную на пути к свойству id и пути к свойству родительского id.
Параметры
-
callable|string$idPath -
callable|string$parentPath -
string$nestingKey необязательно
Возвращает
selfnewCollection() protected
newCollection(mixed ...$args): Cake\Collection\CollectionInterface
Возвращает новый набор.
Позволяет классам, использующим этот трейт, определять собственный тип возвращаемого интерфейса коллекции.
Параметры
-
mixed...$args Аргументы конструктора.
Возвращает
Cake\Collection\CollectionInterfaceoptimizeUnwrap() protected
optimizeUnwrap(): iterable
Распаковывает этот итератор и возвращает самый простой итерабельный объект, который можно использовать для получения данных.
Возвращает
iterableprepend() public
prepend(mixed $items): self
Добавляет набор элементов в начало коллекции, создавая новую коллекцию.
Параметры
-
mixed$items
Возвращает
selfprependItem() public
prependItem(mixed $item, mixed $key = null): self
Добавляет элемент в начало, создавая новую коллекцию.
Параметры
-
mixed$item -
mixed$key необязательно
Возвращает
selfreduce() public
reduce(callable $callback, mixed $initial = null): mixed
Складывает значения в этой коллекции в одно значение, применяя функцию обратного вызова ко всем элементам. $zero — начальное состояние сокращения, а каждый последующий шаг должен возвращаться функцией обратного вызова. Если $zero опущен, используется первое значение коллекции, и сокращение начнется со второго элемента.
Параметры
-
callable$callback -
mixed$initial необязательно
Возвращает
mixedreject() public
reject(callable $callback): self
Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые не проходят проверку истинности. Это противоположно filter.
Каждый раз, когда вызывается обратный вызов, он получает значение элемента в текущей итерации, ключ элемента и эту коллекцию в качестве аргументов в указанном порядке.
Пример:
Фильтрация чётных чисел в массиве, в результате в итоговой коллекции будут присутствовать только значения 1 и 3:
$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) {
return $value % 2 === 0;
}); Параметры
-
callable$callback
Возвращает
selfsample() public
sample(int $length = 10): self
Возвращает новую коллекцию с максимальным количеством случайных элементов $size из этой коллекции
Параметры
-
int$length необязательно
Возвращает
selfserialize() public
serialize(): string
Возвращает строковое представление этого объекта, которое может быть использовано для его восстановления
Возвращает
stringshuffle() public
shuffle(): self
Возвращает новую коллекцию с элементами, расположенными в случайном порядке; эта функция не сохраняет исходные ключи в коллекции.
Возвращает
selfskip() public
skip(int $length): self
Возвращает новую коллекцию, которая пропустит указанное количество элементов в начале итерации.
Параметры
-
int$length
Возвращает
selfsome() public
some(callable $callback): bool
Возвращает true, если любое из значений в этой коллекции проходит проверку, заданную в обратном вызове.
Обратный вызов получает значение и ключ тестируемого элемента и должен возвращать true, если тест пройден.
Пример:
$hasYoungPeople = (new Collection([24, 45, 15]))->some(function ($value, $key) {
return $value < 21;
}); Параметры
-
callable$callback
Возвращает
boolsortBy() public
sortBy(callable|string $path, int $order = \SORT_DESC, int $sort = \SORT_NUMERIC): self
Возвращает отсортированный итератор элементов в этом наборе, упорядоченных по возрастанию результатов применения обратного вызова к каждому значению. $callback также может быть строкой, представляющей имя столбца или свойства.
Обратный вызов получит в качестве первого аргумента каждый элемент из $items, а значение, возвращаемое обратным вызовом, будет использоваться в качестве значения для сортировки данного элемента. Обратите внимание, что функция обратного вызова может быть вызвана более одного раза для одного элемента.
Пример:
$items = $collection->sortBy(function ($user) {
return $user->age;
});
// alternatively
$items = $collection->sortBy('age');
// or use a property path
$items = $collection->sortBy('department.name');
// output all user name order by their age in descending order
foreach ($items as $user) {
echo $user->name;
} Параметры
-
callable|string$path -
int$order необязательно -
int$sort необязательно
Возвращает
selfstopWhen() public
stopWhen(callable|array $condition): self
Создаёт новый набор, который при итерации прекратит выдачу результатов, если предоставленное условие примет значение 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
Возвращает
selfsumOf() 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|inttake() public
take(int $length = 1, int $offset = 0): self
Возвращает новую коллекцию с максимальным количеством элементов $size в порядке, в котором эта коллекция была создана. Если передать второй параметр, он определит, с какой позиции начинать извлечение элементов.
Параметры
-
int$length необязательно -
int$offset необязательно
Возвращаемое значение
selftakeLast() public
takeLast(int $length): self
Возвращает последние N элементов коллекции
Пример:
$items = [1, 2, 3, 4, 5]; $last = (new Collection($items))->takeLast(3); // Result will look like this when converted to array [3, 4, 5];
Параметры
-
int$length
Возвращаемое значение
selfthrough() public
through(callable $callback): self
Пропускает эту коллекцию через вызываемый объект в качестве первого аргумента. Это полезно для декорирования всей коллекции другим объектом.
Пример:
$items = [1, 2, 3];
$decorated = (new Collection($items))->through(function ($collection) {
return new MyCustomCollection($collection);
}); Параметры
-
callable$callback
Возвращаемое значение
selftoArray() public
toArray(bool $keepKeys = true): array
Возвращает массив результатов
Параметры
-
bool$keepKeys необязательно
Возвращаемое значение
arraytoList() public
toList(): array
Возвращает массив результатов с числовыми индексами. Это эквивалентно вызову toArray(false)
Возвращаемое значение
arraytranspose() public
transpose(): Cake\Collection\CollectionInterface
Транспонировать строки и столбцы в столбцы и строки
Пример:
$items = [
['Products', '2012', '2013', '2014'],
['Product A', '200', '100', '50'],
['Product B', '300', '200', '100'],
['Product C', '400', '300', '200'],
]
$transpose = (new Collection($items))->transpose()->toList();
// Returns
// [
// ['Products', 'Product A', 'Product B', 'Product C'],
// ['2012', '200', '300', '400'],
// ['2013', '100', '200', '300'],
// ['2014', '50', '100', '200'],
// ] Возвращает
Cake\Collection\CollectionInterfaceИсключения
LogicExceptionunfold() public
unfold(callable|null $callback = null): self
Создаёт новую коллекцию, где элементы являются конкатенацией списков элементов, сгенерированных функцией-трансформером, применённой к каждому элементу исходной коллекции.
Функция-трансформер получит значение и ключ для каждого элемента коллекции в указанном порядке, и она должна вернуть массив или объект Traversable, который может быть конкатенирован с итоговым результатом.
Если функция-трансформер не передана, будет использована функция "тождества". Это полезно, когда каждый элемент исходной коллекции представляет собой список элементов, которые нужно добавить один за другим.
Пример:
$items [[1, 2, 3], [4, 5]]; $unfold = (new Collection($items))->unfold(); // Returns [1, 2, 3, 4, 5]
Использование функции-трансформера
$items [1, 2, 3];
$allItems = (new Collection($items))->unfold(function ($page) {
return $service->fetchPage($page)->toArray();
}); Параметры
-
callable|null$callback необязательно
Возвращает
selfunserialize() public
unserialize(string $collection): void
Десериализует переданную строку и восстанавливает экземпляр Collection
Параметры
-
string$collection Десериализованная коллекция
Возвращает
voidunwrap() public
unwrap(): Traversable
Возвращает ближайший вложенный итератор, который можно безопасно пройти, не теряя возможных преобразований. Это используется в основном для удаления пустых обёрток IteratorIterator, которые могут только замедлить процесс итерации.
Возвращает
Traversablezip() public
zip(iterable $items): self
Объединяет элементы этого набора с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
Пример:
$collection = new Collection([1, 2]); $collection->zip([3, 4], [5, 6])->toList(); // returns [[1, 3, 5], [2, 4, 6]]
Параметры
-
iterable$items
Возвращает
selfzipWith() public
zipWith(iterable $items, callable $callback): self
Объединяет элементы этого набора с каждым элементом переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.
Результирующим элементом будет возвращаемое значение функции $callable.
Пример:
$collection = new Collection([1, 2]);
$zipped = $collection->zipWith([3, 4], [5, 6], function (...$args) {
return array_sum($args);
});
$zipped->toList(); // returns [9, 12]; [(1 + 3 + 5), (2 + 4 + 6)] Параметры
-
iterable$items -
callable$callback
Возвращает
self
© 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