Спроектирован для PHP аналогично itertools в Python.
IterTools поддерживает два вида конструкций для итерирования:
- Итерирование в цикле
- Итерирование в потоке цепочечных вызовов
Пример итерирования в цикле
foreach (Multi::zip(['a', 'b'], [1, 2]) as [$letter, $number]) {
print($letter . $number); // a1, b2
}Пример итерирования в потоке цепочечных вызовов
$result = Stream::of([1, 1, 2, 2, 3, 4, 5])
->distinct() // [1, 2, 3, 4, 5]
->map(fn ($x) => $x**2) // [1, 4, 9, 16, 25]
->filter(fn ($x) => $x < 10) // [1, 4, 9]
->toSum(); // 14Методы библиотеки гарантировано работают с любыми iterable сущностями:
arrayIteratorGeneratorTraversable
Добавьте библиотеку в зависимости в файле composer.json вашего проекта:
{
"require": {
"markrogoyski/itertools-php": "2.*"
}
}Используйте composer, чтобы установить библиотеку:
$ composer installComposer установит IterTools в папку vendor вашего проекта. После этого вы можете использовать функционал библиотеки в файлах своего проекта, используя Composer Autoloader.
require_once __DIR__ . '/vendor/autoload.php';Альтернативный вариант установки. Выполните данную команду в терминале, находясь в корневой директории вашего проекта:
$ composer require markrogoyski/itertools-php:2.*
- PHP 8.2+
- (Для PHP 7.4–8.1 используйте v1.9)
| Метод | Описание | Пример кода |
|---|---|---|
chain |
Последовательно итерирует коллекции | Multi::chain($list1, $list2) |
roundRobin |
Поочерёдно отдаёт по одному элементу из каждой коллекции, чередуя источники | Multi::roundRobin($list1, $list2) |
zip |
Параллельно итерирует коллекции, пока не закончится самый короткий итератор | Multi::zip($list1, $list2) |
zipEqual |
Параллельно итерирует коллекции одного размера, в случае разных размеров бросает исключение | Multi::zipEqual($list1, $list2) |
zipFilled |
Параллельно итерирует коллекции с подстановкой филлера для закончившихся итераторов | Multi::zipFilled($default, $list1, $list2) |
zipLongest |
Параллельно итерирует коллекции, пока не закончится самый длинный итератор | Multi::zipLongest($list1, $list2) |
unzip |
Транспонирует последовательность строк в столбцы (обратная операция к zip) | Multi::unzip($rows) |
| Метод | Описание | Пример кода |
|---|---|---|
accumulate |
Накапливает результат применения бинарного оператора | Single::accumulate($data, $op, [$initial]) |
chunkwise |
Итерирует коллекцию, разбитую на чанки | Single::chunkwise($data, $chunkSize) |
chunkwiseOverlap |
Итерирует коллекцию, разбитую на взаимонакладывающиеся чанки | Single::chunkwiseOverlap($data, $chunkSize, $overlapSize) |
compress |
Возвращает элементы из коллекции, выбранные селектором | Single::compress($data, $selectors) |
compressAssociative |
Возвращает элементы из коллекции по заданным ключам | Single::compressAssociative($data, $selectorKeys) |
dropLast |
Перебирает все элементы, кроме последних N | Single::dropLast($data, $count) |
dropWhile |
Пропускает элементы, пока предикат возвращает истину | Single::dropWhile($data, $predicate) |
enumerate |
Итерирует пары [индекс, значение] |
Single::enumerate($data, [$start]) |
filter |
Возвращает только те элементы, для которых предикат возвращает истину | Single::filter($data, $predicate) |
filterTrue |
Возвращает только истинные элементы из коллекции | Single::filterTrue($data) |
filterFalse |
Возвращает только ложные элементы из коллекции | Single::filterFalse($data, $predicate) |
filterKeys |
Возвращает только те элементы, для ключей которых предикат возвращает истину | Single::filterKeys($data, $predicate) |
filterWithKeys |
Фильтрация предикатом, учитывающим значение и ключ | Single::filterWithKeys($data, $predicate) |
flatMap |
Отображение коллекции с уплощением результата на 1 уровень вложенности | Single::flatMap($data, $mapper) |
flatMapWithKeys |
Отображение, учитывающее ключи, с уплощением результата | Single::flatMapWithKeys($data, $func) |
flatten |
Многоуровневое уплощение коллекции | Single::flatten($data, [$dimensions]) |
groupAdjacentBy |
Группирует подряд идущие элементы по извлечённому ключу | Single::groupAdjacentBy($data, $keyFn) |
groupBy |
Группирует элементы коллекции | Single::groupBy($data, $groupKeyFunction, [$itemKeyFunc]) |
intersperse |
Вставляет разделитель между элементами коллекции | Single::intersperse($data, $separator) |
limit |
Ограничивает итерирование коллекции заданным максимальным числом итераций | Single::limit($data, $limit) |
map |
Отображение коллекции с использованием callback-функции | Single::map($data, $function) |
mapWithKeys |
Отображение функцией, учитывающей значение и ключ | Single::mapWithKeys($data, $func) |
mapSpread |
Отображение, при котором элементы распаковываются как позиционные аргументы | Single::mapSpread($data, $function) |
padLeft |
Дополняет коллекцию слева до указанной минимальной длины | Single::padLeft($data, $length, $fill) |
padRight |
Дополняет коллекцию справа до указанной минимальной длины | Single::padRight($data, $length, $fill) |
pairwise |
Итерирует коллекцию попарно (с наложением) | Single::pairwise($data) |
range |
Лениво генерирует конечную арифметическую прогрессию чисел | Single::range($start, $end, [$step]) |
reindex |
Переиндексирует key-value коллекцию | Single::reindex($data, $reindexer) |
repeat |
Повторяет данное значение заданное число раз | Single::repeat($item, $repetitions) |
reverse |
Итерирует коллекцию в обратном порядке | Single::reverse($data) |
skip |
Итерирует коллекцию, пропуская некоторое количество элементов подряд | Single::skip($data, $count, [$offset]) |
slice |
Возвращает подвыборку коллекции | Single::slice($data, [$start], [$count], [$step]) |
splitWhen |
Разбивает коллекцию на группы при срабатывании предиката | Single::splitWhen($data, $predicate) |
string |
Итерирует строку посимвольно | Single::string($string) |
takeLast |
Перебирает последние N элементов | Single::takeLast($data, $count) |
takeWhile |
Отдает элементы, пока предикат возвращает истину | Single::takeWhile($data, $predicate) |
windowed |
Итерирует скользящие окна элементов | Single::windowed($data, $size, [$step], [$partial]) |
withFirst |
Сопоставляет каждому элементу флаг «первый» | Single::withFirst($data) |
withFirstAndLast |
Сопоставляет каждому элементу флаги «первый»/«последний» | Single::withFirstAndLast($data) |
withLast |
Сопоставляет каждому элементу флаг «последний» | Single::withLast($data) |
| Метод | Описание | Пример кода |
|---|---|---|
count |
Бесконечно перебирает последовательность целых чисел | Infinite::count($start, $step) |
cycle |
Бесконечно зацикливает перебор коллекции | Infinite::cycle($collection) |
generate |
Бесконечно отдаёт значения, возвращаемые поставщиком | Infinite::generate($supplier) |
iterate |
Бесконечно применяет функцию к её предыдущему результату | Infinite::iterate($initial, $function) |
repeat |
Бесконечно повторяет данное значение | Infinite::repeat($item) |
| Метод | Описание | Пример кода |
|---|---|---|
choice |
Случайные выборы вариантов из списка | Random::choice($list, $repetitions) |
coinFlip |
Случайные броски монеты (0 или 1) | Random::coinFlip($repetitions) |
number |
Случайные целые числа | Random::number($min, $max, $repetitions) |
percentage |
Случайные вещественные числа между 0 и 1 | Random::percentage($repetitions) |
reservoirSample |
Однопроходная равномерная случайная выборка | Random::reservoirSample($data, $size, [$engine]) |
rockPaperScissors |
Случайный выбор "камень-ножницы-бумага" | Random::rockPaperScissors($repetitions) |
sample |
Случайная выборка без повторений | Random::sample($data, $size, [$engine]) |
| Метод | Описание | Пример кода |
|---|---|---|
frequencies |
Абсолютное распределение частот | Math::frequencies($data, [$strict]) |
frequenciesBy |
Распределение частот по функции-ключу | Math::frequenciesBy($data, $keyFunc, [$strict]) |
relativeFrequencies |
Относительное распределение частот | Math::relativeFrequencies($data, [$strict]) |
relativeFrequenciesBy |
Относительное распределение частот по функции-ключу | Math::relativeFrequenciesBy($data, $keyFunc, [$strict]) |
runningAverage |
Накопление среднего арифметического | Math::runningAverage($numbers, $initialValue) |
runningDifference |
Накопление разности | Math::runningDifference($numbers, $initialValue) |
runningMax |
Поиск максимального значения | Math::runningMax($numbers, $initialValue) |
runningMin |
Поиск минимального значения | Math::runningMin($numbers, $initialValue) |
runningProduct |
Накопление произведения | Math::runningProduct($numbers, $initialValue) |
runningTotal |
Накопление суммы | Math::runningTotal($numbers, $initialValue) |
| Метод | Описание | Пример кода |
|---|---|---|
distinct |
Фильтрует коллекцию, сохраняя только уникальные значения | Set::distinct($data) |
distinctAdjacent |
Удаляет только подряд идущие дубликаты | Set::distinctAdjacent($data) |
distinctAdjacentBy |
Удаляет только подряд идущие дубликаты по заданному ключу | Set::distinctAdjacentBy($data, $keyFn) |
distinctBy |
Фильтрует коллекцию, сохраняя только уникальные значения по компаратору | Set::distinctBy($data, $compareBy) |
duplicates |
Возвращает значения, встречающиеся более одного раза | Set::duplicates($data, [$strict]) |
duplicatesBy |
Возвращает дубликаты по извлечённому ключу | Set::duplicatesBy($data, $keyFn) |
intersection |
Пересечение нескольких коллекций | Set::intersection(...$iterables) |
intersectionCoercive |
Пересечение нескольких коллекций в режиме приведения типов | Set::intersectionCoercive(...$iterables) |
partialIntersection |
Частичное пересечение нескольких коллекций | Set::partialIntersection($minCount, ...$iterables) |
partialIntersectionCoercive |
Частичное пересечение нескольких коллекций в режиме приведения типов | Set::partialIntersectionCoercive($minCount, ...$iterables) |
difference |
Разность коллекций | Set::difference($a, ...$iterables) |
differenceCoercive |
Разность коллекций в режиме приведения типов | Set::differenceCoercive($a, ...$iterables) |
symmetricDifference |
Симметрическая разница нескольких коллекций | Set::symmetricDifference(...$iterables) |
symmetricDifferenceCoercive |
Симметрическая разница нескольких коллекций в режиме приведения типов | Set::symmetricDifferenceCoercive(...$iterables) |
union |
Объединение нескольких коллекций | Set::union(...$iterables) |
unionCoercive |
Объединение нескольких коллекций в режиме приведения типов | Set::unionCoercive(...$iterables) |
| Метод | Описание | Пример кода |
|---|---|---|
product |
Декартово произведение коллекций | Combinatorics::product(...$iterables) |
permutations |
Перестановки элементов коллекции | Combinatorics::permutations($data, [$r]) |
combinations |
Сочетания элементов коллекции | Combinatorics::combinations($data, $r) |
combinationsWithReplacement |
Сочетания с повторениями | Combinatorics::combinationsWithReplacement($data, $r) |
powerset |
Все подмножества коллекции (булеан) | Combinatorics::powerset($data) |
| Итератор | Описание | Пример кода |
|---|---|---|
asort |
Сортирует коллекцию с сохранением ключей | Sort::asort($data, [$comparator]) |
asortBy |
Сортирует коллекцию по извлечённому ключу с сохранением ключей | Sort::asortBy($data, $keyFn) |
largest |
n наибольших элементов (по убыванию) | Sort::largest($data, $n, [$keyFn]) |
shuffle |
Итерирует коллекцию в случайном порядке | Sort::shuffle($data, [$engine]) |
smallest |
n наименьших элементов (по возрастанию) | Sort::smallest($data, $n, [$keyFn]) |
sort |
Сортирует коллекцию | Sort::sort($data, [$comparator]) |
sortBy |
Сортирует коллекцию по извлечённому ключу | Sort::sortBy($data, $keyFn) |
| Итератор | Описание | Пример кода |
|---|---|---|
readCsv |
Итерирует коллекции ячеек CSV-файла построчно | File::readCsv($fileHandle) |
readCsvAssoc |
Итерирует CSV-файл как массивы с ключами из заголовков | File::readCsvAssoc($fileHandle) |
readLines |
Итерирует содержимое файла построчно | File::readLines($fileHandle) |
writeCsv |
Записывает коллекцию строк в файл в формате CSV | File::writeCsv($fileHandle, $rows, $header) |
writeLines |
Записывает коллекцию строк в файл | File::writeLines($fileHandle, $lines) |
| Итератор | Описание | Пример кода |
|---|---|---|
partition |
Разделяет коллекцию на два списка: истинные и ложные | Transform::partition($data, $predicate) |
tee |
Создает несколько одинаковых независимых итераторов из данной коллекции | Transform::tee($data, $count) |
toArray |
Преобразует итерируемую коллекцию в массив | Transform::toArray($data) |
toAssociativeArray |
Преобразует итерируемую коллекцию в ассоциативный массив | Transform::toAssociativeArray($data, [$keyFunc], [$valueFunc]) |
toIterator |
Преобразует итерируемую коллекцию в итератор | Transform::toIterator($data) |
| Метод | Описание | Пример кода |
|---|---|---|
allMatch |
Истинно, если предикат возвращает истину для всех элементов коллекции | Summary::allMatch($data, $predicate) |
allUnique |
Истинно, если все элементы коллекции уникальны | Summary::allUnique($data, [$strict]) |
anyMatch |
Истинно, если предикат возвращает истину хотя бы для одного элемента коллекции | Summary::anyMatch($data, $predicate) |
arePermutations |
Истинно, если коллекции являются перестановками друг друга | Summary::arePermutations(...$iterables) |
arePermutationsCoercive |
Истинно, если коллекции являются перестановками друг друга (в режиме приведения типов) | Summary::arePermutationsCoercive(...$iterables) |
atLeastN |
Истинно, если предикат возвращает истину как минимум для N элементов | Summary::atLeastN($data, $n, [$predicate]) |
atMostN |
Истинно, если предикат возвращает истину не более чем для N элементов | Summary::atMostN($data, $n, [$predicate]) |
contains |
Истинно, если коллекция содержит искомое значение | Summary::contains($data, $needle) |
containsCoercive |
Истинно, если коллекция содержит искомое значение (в режиме приведения типов) | Summary::containsCoercive($data, $needle) |
endsWith |
Истинно, если коллекция заканчивается заданным суффиксом | Summary::endsWith($data, $suffix) |
endsWithCoercive |
Истинно, если коллекция заканчивается заданным суффиксом (в режиме приведения типов) | Summary::endsWithCoercive($data, $suffix) |
exactlyN |
Истинно, если предикат возвращает истину в точности для N элементов | Summary::exactlyN($data, $n, $predicate) |
isPartitioned |
Истинно, если истинные элементы находятся в коллекции перед ложными (истинность определяет предикат) | Summary::isPartitioned($data, $predicate) |
isEmpty |
Истинно, если коллекция пуста | Summary::isEmpty($data) |
isSorted |
Истинно, если коллекция отсортирована в прямом порядке | Summary::isSorted($data) |
isReversed |
Истинно, если коллекция отсортирована в обратном порядке | Summary::isReversed($data) |
isSortedBy |
Истинно, если коллекция отсортирована по функции-ключу в прямом порядке | Summary::isSortedBy($data, $keyFunc) |
isReversedBy |
Истинно, если коллекция отсортирована по функции-ключу в обратном порядке | Summary::isReversedBy($data, $keyFunc) |
noneMatch |
Истинно, если предикат возвращает ложь для всех элементов коллекции | Summary::noneMatch($data, $predicate) |
same |
Истинно, если данные коллекции одинаковы | Summary::same(...$iterables) |
sameCount |
Истинно, если данные коллекции имеют одинаковую длину | Summary::sameCount(...$iterables) |
startsWith |
Истинно, если коллекция начинается с заданного префикса | Summary::startsWith($data, $prefix) |
startsWithCoercive |
Истинно, если коллекция начинается с заданного префикса (в режиме приведения типов) | Summary::startsWithCoercive($data, $prefix) |
| Метод | Описание | Пример кода |
|---|---|---|
toAverage |
Среднее арифметическое элементов коллекции | Reduce::toAverage($numbers) |
toCount |
Длина коллекции | Reduce::toCount($data) |
toCountBy |
Количества, сгруппированные по функции-ключу | Reduce::toCountBy($data, $keyFunc) |
toFirst |
Первый элемент коллекции | Reduce::toFirst() |
toFirstAndLast |
Первый и последний элементы коллекции | Reduce::toFirstAndLast() |
toFirstMatch |
Первый элемент, удовлетворяющий предикату | Reduce::toFirstMatch($data, $predicate, [$default]) |
toFirstMatchIndex |
Индекс первого элемента, удовлетворяющего предикату | Reduce::toFirstMatchIndex($data, $predicate, [$default]) |
toFirstMatchKey |
Ключ первого элемента, удовлетворяющего предикату | Reduce::toFirstMatchKey($data, $predicate, [$default]) |
toLast |
Последний элемент коллекции | Reduce::toLast() |
toLastMatch |
Последний элемент, удовлетворяющий предикату | Reduce::toLastMatch($data, $predicate, [$default]) |
toLastMatchIndex |
Индекс последнего элемента, удовлетворяющего предикату | Reduce::toLastMatchIndex($data, $predicate, [$default]) |
toLastMatchKey |
Ключ последнего элемента, удовлетворяющего предикату | Reduce::toLastMatchKey($data, $predicate, [$default]) |
toOnly |
Единственный элемент коллекции | Reduce::toOnly($data) |
consume |
Полный обход коллекции с отбрасыванием значений | Reduce::consume($data) |
toMax |
Максимальный элемент коллекции | Reduce::toMax($numbers, [$compareBy]) |
toMin |
Минимальный элемент коллекции | Reduce::toMin($numbers, [$compareBy]) |
toMinMax |
Минимальный и максимальный элемент коллекции | Reduce::toMinMax($numbers, [$compareBy]) |
toMedian |
Медиана коллекции | Reduce::toMedian($numbers) |
toMode |
Список мод коллекции (наиболее частых значений) | Reduce::toMode($data) |
toVariance |
Дисперсия (генеральная/выборочная) | Reduce::toVariance($numbers, [$sample]) |
toStandardDeviation |
Стандартное отклонение (генеральное/выборочное) | Reduce::toStandardDeviation($numbers, [$sample]) |
toPercentile |
Значение коллекции для заданного процентиля [0, 100] | Reduce::toPercentile($numbers, $percentile) |
toQuantile |
Значение коллекции для заданного квантиля [0, 1] | Reduce::toQuantile($numbers, $quantile) |
toNth |
N-й элемент коллекции | Reduce::toNth($data, $position) |
toProduct |
Произведение элементов коллекции | Reduce::toProduct($numbers) |
toRandomValue |
Случайный элемент из коллекции | Reduce::toRandomValue($data) |
toRange |
Разница между максимальным и минимальным элементами коллекции | Reduce::toRange($numbers) |
toString |
Преобразование коллекции в строку | Reduce::toString($data, [$separator], [$prefix], [$suffix]) |
toSum |
Сумма элементов коллекции | Reduce::toSum($numbers) |
toValue |
Редуцирование коллекции до значения, вычисляемого с использованием callback-функции | Reduce::toValue($data, $reducer, $initialValue) |
| Источник | Описание | Пример кода |
|---|---|---|
of |
Создает поток для цепочечных вызовов из данной коллекции | Stream::of($iterable) |
ofCoinFlips |
Создает поток для цепочечных вызовов из бесконечных случайных бросков монеты | Stream::ofCoinFlips($repetitions) |
ofCsvFile |
Создает поток для цепочечных вызовов из строк CSV-файла | Stream::ofCsvFile($fileHandle) |
ofCsvFileAssoc |
Создает поток из строк CSV-файла с ключами из заголовков | Stream::ofCsvFileAssoc($fileHandle) |
ofFileLines |
Создает поток для цепочечных вызовов из строк файла | Stream::ofFileLines($fileHandle) |
ofEmpty |
Создает поток для цепочечных вызовов из пустой коллекции | Stream::ofEmpty() |
ofRandomChoice |
Создает поток для цепочечных вызовов из бесконечных случайных выборов элемента из списка | Stream::ofRandomChoice($items, $repetitions) |
ofRandomNumbers |
Создает поток для цепочечных вызовов из бесконечного набора случайных целых чисел | Stream::ofRandomNumbers($min, $max, $repetitions) |
ofRandomPercentage |
Создает поток для цепочечных вызовов из бесконечного набора случайных вещественных чисел между 0 и 1 | Stream::ofRandomPercentage($repetitions) |
ofRange |
Создает ленивый поток конечной арифметической прогрессии чисел | Stream::ofRange($start, $end, $step) |
ofRockPaperScissors |
Создает поток для цепочечных вызовов из бесконечных случайных выборов "камень-ножницы-бумага" | Stream::ofRockPaperScissors($repetitions) |
| Операция | Описание | Пример кода |
|---|---|---|
accumulate |
Накапливает результат применения бинарного оператора | $stream->accumulate($op, [$initial]) |
append |
Добавляет значения в конец потока | $stream->append(...$values) |
asort |
Сортирует коллекцию с сохранением ключей | $stream->asort([$comparator]) |
asortBy |
Сортирует коллекцию по извлечённому ключу с сохранением ключей | $stream->asortBy($keyFn) |
chainWith |
Добавляет в конец итератора другие коллекции для последовательного итерирования | $stream->chainWith(...$iterables) |
compress |
Отфильтровывает из коллекции элементы, которые не выбраны | $stream->compress($selectors) |
compressAssociative |
Оставляет элементы с выбранными ключами | $stream->compressAssociative($selectorKeys) |
chunkwise |
Итерирует коллекцию с разбиением по чанкам | $stream->chunkwise($chunkSize) |
chunkwiseOverlap |
Итерирует коллекцию с разбиением по взаимонакладывающимся чанкам | $stream->chunkwiseOverlap($chunkSize, $overlap) |
distinct |
Фильтрует коллекцию, сохраняя только уникальные значения | $stream->distinct($strict) |
distinctAdjacent |
Удаляет только подряд идущие дубликаты | $stream->distinctAdjacent() |
distinctAdjacentBy |
Удаляет только подряд идущие дубликаты по заданному ключу | $stream->distinctAdjacentBy($keyFn) |
distinctBy |
Фильтрует коллекцию, сохраняя только уникальные значения по компаратору | $stream->distinctBy($compareBy) |
dropLast |
Перебирает все элементы потока, кроме последних N | $stream->dropLast($count) |
dropWhile |
Пропускает элементы из коллекции, пока предикат возвращает истину | $stream->dropWhile($predicate) |
duplicates |
Возвращает значения, встречающиеся более одного раза | $stream->duplicates([$strict]) |
duplicatesBy |
Возвращает дубликаты по извлечённому ключу | $stream->duplicatesBy($keyFn) |
enumerate |
Итерирует пары [индекс, значение] |
$stream->enumerate([$start]) |
filter |
Возвращает из коллекции только те элементы, для которых предикат возвращает истину | $stream->filter($predicate) |
filterTrue |
Возвращает только истинные элементы из коллекции | $stream->filterTrue($predicate) |
filterFalse |
Возвращает только ложные элементы из коллекции | $stream->filterFalse($predicate) |
filterKeys |
Возвращает только те элементы, для ключей которых предикат возвращает истину | $stream->filterKeys($predicate) |
filterWithKeys |
Фильтрация предикатом, учитывающим значение и ключ | $stream->filterWithKeys($predicate) |
flatMap |
Отображение коллекции с уплощением результата на 1 уровень вложенности | $stream->flatMap($function) |
flatMapWithKeys |
Отображение, учитывающее ключи, с уплощением результата | $stream->flatMapWithKeys($func) |
flatten |
Многоуровневое уплощение коллекции | $stream->flatten($dimensions) |
frequencies |
Абсолютная частота вхождений | $stream->frequencies([$strict]) |
frequenciesBy |
Частота вхождений по функции-ключу | $stream->frequenciesBy($keyFunc, [$strict]) |
groupAdjacentBy |
Группирует подряд идущие элементы по извлечённому ключу | $stream->groupAdjacentBy($keyFn) |
groupBy |
Группирует элементы из коллекции по заданному правилу | $stream->groupBy($groupKeyFunction) |
infiniteCycle |
Бесконечно зацикливает перебор коллекции | $stream->infiniteCycle() |
intersectionWith |
Возвращает пересечение хранимой коллекции с другими коллекциями | $stream->intersectionWith(...$iterables) |
intersectionCoerciveWith |
Возвращает пересечение хранимой коллекции с другими коллекциями (в режиме приведения типов) | $stream->intersectionCoerciveWith(...$iterables) |
intersperse |
Вставляет разделитель между элементами коллекции | $stream->intersperse($separator) |
largest |
Сводит поток к n наибольшим элементам (по убыванию) | $stream->largest($n, [$keyFn]) |
limit |
Ограничивает итерирование коллекции заданным максимальным числом итераций | $stream->limit($limit) |
map |
Отображение коллекции с использованием callback-функции | $stream->map($function) |
mapWithKeys |
Отображение функцией, учитывающей значение и ключ | $stream->mapWithKeys($func) |
mapSpread |
Отображение, при котором элементы распаковываются как позиционные аргументы | $stream->mapSpread($function) |
padLeft |
Дополняет поток слева до указанной минимальной длины | $stream->padLeft($length, $fill) |
padRight |
Дополняет поток справа до указанной минимальной длины | $stream->padRight($length, $fill) |
pairwise |
Итерирует коллекцию попарно (с наложением) | $stream->pairwise() |
partialIntersectionWith |
Возвращает частичное пересечение хранимой коллекции с другими коллекциями | $stream->partialIntersectionWith( $minIntersectionCount, ...$iterables) |
partialIntersectionCoerciveWith |
Возвращает частичное пересечение хранимой коллекции с другими коллекциями (в режиме приведения типов) | $stream->partialIntersectionCoerciveWith( $minIntersectionCount, ...$iterables) |
productWith |
Декартово произведение коллекции с другими коллекциями | $stream->productWith(...$iterables) |
permutations |
Перестановки элементов коллекции | $stream->permutations([$r]) |
combinations |
Сочетания элементов коллекции | $stream->combinations($r) |
combinationsWithReplacement |
Сочетания с повторениями элементов потока | $stream->combinationsWithReplacement($r) |
powerset |
Все подмножества элементов потока (булеан) | $stream->powerset() |
prepend |
Добавляет значения в начало потока | $stream->prepend(...$values) |
reindex |
Переиндексирует key-value коллекцию | $stream->reindex($reindexer) |
relativeFrequencies |
Относительная частота вхождений | $stream->relativeFrequencies([$strict]) |
relativeFrequenciesBy |
Относительная частота вхождений по функции-ключу | $stream->relativeFrequenciesBy($keyFunc, [$strict]) |
reservoirSample |
Однопроходная равномерная случайная выборка (энергичная) | $stream->reservoirSample($size, [$engine]) |
reverse |
Итерирует коллекцию в обратном порядке | $stream->reverse() |
roundRobinWith |
Поочерёдно отдаёт элементы из потока и заданных коллекций, чередуя источники | $stream->roundRobinWith(...$iterables) |
runningAverage |
Накопление среднего арифметического элементов коллекции | $stream->runningAverage($initialValue) |
runningDifference |
Накопление разности элементов коллекции | $stream->runningDifference($initialValue) |
runningMax |
Поиск максимального значения из коллекции | $stream->runningMax($initialValue) |
runningMin |
Поиск минимального значения из коллекции | $stream->runningMin($initialValue) |
runningProduct |
Накопление произведения элементов коллекции | $stream->runningProduct($initialValue) |
runningTotal |
Накопление суммы элементов коллекции | $stream->runningTotal($initialValue) |
sample |
Случайная выборка из $size элементов потока без повторений | $stream->sample($size, [$engine]) |
shuffle |
Рандомизирует порядок элементов потока | $stream->shuffle([$engine]) |
skip |
Пропускает n элементов коллекции | $stream->skip($count, [$offset]) |
slice |
Возвращает подвыборку коллекции | $stream->slice([start], [$count], [step]) |
smallest |
Сводит поток к n наименьшим элементам (по возрастанию) | $stream->smallest($n, [$keyFn]) |
sort |
Сортирует хранимую коллекцию | $stream->sort([$comparator]) |
sortBy |
Сортирует хранимую коллекцию по извлечённому ключу | $stream->sortBy($keyFn) |
splitWhen |
Разбивает поток на группы при срабатывании предиката | $stream->splitWhen($predicate) |
differenceWith |
Возвращает разность хранимой коллекции с другими коллекциями | $stream->differenceWith(...$iterables) |
differenceCoerciveWith |
Возвращает разность хранимой коллекции с другими коллекциями (в режиме приведения типов) | $stream->differenceCoerciveWith(...$iterables) |
symmetricDifferenceWith |
Возвращает симметрическую разность хранимой коллекции с другими коллекциями | $this->symmetricDifferenceWith(...$iterables) |
symmetricDifferenceCoerciveWith |
Возвращает симметрическую разность хранимой коллекции с другими коллекциями (в режиме приведения типов) | $this->symmetricDifferenceCoerciveWith( ...$iterables) |
takeLast |
Перебирает последние N элементов потока | $stream->takeLast($count) |
takeWhile |
Отдает элементы из коллекции, пока предикат возвращает истину | $stream->takeWhile($predicate) |
unionWith |
Возвращает объединение хранимой коллекции с другими коллекциями | $stream->unionWith(...$iterables) |
unionCoerciveWith |
Возвращает объединение хранимой коллекции с другими коллекциями (в режиме приведения типов) | $stream->unionCoerciveWith(...$iterables) |
unzip |
Транспонирует строки потока в столбцы (обратная операция к zip) | $stream->unzip() |
windowed |
Итерирует скользящие окна элементов | $stream->windowed($size, [$step], [$partial]) |
withFirst |
Сопоставляет каждому элементу флаг «первый» | $stream->withFirst() |
withFirstAndLast |
Сопоставляет каждому элементу флаги «первый»/«последний» | $stream->withFirstAndLast() |
withLast |
Сопоставляет каждому элементу флаг «последний» | $stream->withLast() |
zip |
Транспонирует поток строк по столбцам, останавливаясь по самой короткой строке | $stream->zip() |
zipLongest |
Транспонирует поток строк по столбцам до самой длинной строки (отсутствующие → null) | $stream->zipLongest() |
zipFilled |
Транспонирует поток строк по столбцам до самой длинной, подставляя филлер | $stream->zipFilled($filler) |
zipEqual |
Транспонирует поток строк по столбцам, бросает исключение при разных длинах | $stream->zipEqual() |
zipWith |
Параллельно итерирует коллекцию вместе с другими, пока не закончится самый короткий итератор | $stream->zipWith(...$iterables) |
zipEqualWith |
Параллельно итерирует коллекцию вместе с другими одного размера, в случае разных размеров бросает исключение | $stream->zipEqualWith(...$iterables) |
zipFilledWith |
Параллельно итерирует коллекцию вместе с другими, подставляя для закончившихся заданный филлер | $stream->zipFilledWith($default, ...$iterables) |
zipLongestWith |
Параллельно итерирует коллекцию вместе с другими, пока не закончится самый длинный итератор | $stream->zipLongestWith(...$iterables) |
| Операция | Описание | Пример кода |
|---|---|---|
allMatch |
Истинно, если предикат возвращает истину для всех элементов коллекции | $stream->allMatch($predicate) |
allUnique |
Истинно, если все элементы коллекции уникальны | $stream->allUnique([$strict]]) |
anyMatch |
Истинно, если предикат возвращает истину хотя бы для одного элемента коллекции | $stream->anyMatch($predicate) |
arePermutationsWith |
Истинно, если коллекции являются перестановками друг друга | $stream->arePermutationsWith(...$iterables) |
arePermutationsCoerciveWith |
Истинно, если коллекции являются перестановками друг друга (в режиме приведения типов) | $stream->arePermutationsCoerciveWith(...$iterables) |
atLeastN |
Истинно, если предикат возвращает истину как минимум для N элементов | $stream->atLeastN($n, [$predicate]) |
atMostN |
Истинно, если предикат возвращает истину не более чем для N элементов | $stream->atMostN($n, [$predicate]) |
contains |
Истинно, если поток содержит искомое значение | $stream->contains($needle) |
containsCoercive |
Истинно, если поток содержит искомое значение (в режиме приведения типов) | $stream->containsCoercive($needle) |
endsWith |
Истинно, если поток заканчивается заданным суффиксом | $stream->endsWith($suffix) |
endsWithCoercive |
Истинно, если поток заканчивается заданным суффиксом (в режиме приведения типов) | $stream->endsWithCoercive($suffix) |
exactlyN |
Истинно, если предикат возвращает истину в точности для N элементов | $stream->exactlyN($n, $predicate) |
isEmpty |
Истинно, если коллекция пуста | $stream::isEmpty() |
isPartitioned |
Истинно, если истинные элементы находятся в коллекции перед ложными (истинность определяет предикат) | $stream::isPartitioned($predicate) |
isSorted |
Истинно, если коллекция отсортирована в прямом порядке | $stream->isSorted() |
isReversed |
Истинно, если коллекция отсортирована в обратном порядке | $stream->isReversed() |
isSortedBy |
Истинно, если коллекция отсортирована по функции-ключу в прямом порядке | $stream->isSortedBy($keyFunc) |
isReversedBy |
Истинно, если коллекция отсортирована по функции-ключу в обратном порядке | $stream->isReversedBy($keyFunc) |
noneMatch |
Истинно, если предикат возвращает ложь для всех элементов коллекции | $stream->noneMatch($predicate) |
sameWith |
Истинно, если данные коллекции одинаковы | $stream->sameWith(...$iterables) |
sameCountWith |
Истинно, если данные коллекции имеют одинаковую длину | $stream->sameCountWith(...$iterables) |
startsWith |
Истинно, если поток начинается с заданного префикса | $stream->startsWith($prefix) |
startsWithCoercive |
Истинно, если поток начинается с заданного префикса (в режиме приведения типов) | $stream->startsWithCoercive($prefix) |
| Завершающая операция | Описание | Пример кода |
|---|---|---|
toAverage |
Среднее арифметическое элементов коллекции | $stream->toAverage() |
toCount |
Длина коллекции | $stream->toCount() |
toCountBy |
Количества, сгруппированные по функции-ключу | $stream->toCountBy($keyFunc) |
toFirst |
Первый элемент коллекции | $stream->toFirst() |
toFirstAndLast |
Первый и последний элементы коллекции | $stream->toFirstAndLast() |
toFirstMatch |
Первый элемент, удовлетворяющий предикату | $stream->toFirstMatch($predicate, [$default]) |
toFirstMatchIndex |
Индекс первого элемента, удовлетворяющего предикату | $stream->toFirstMatchIndex($predicate, [$default]) |
toFirstMatchKey |
Ключ первого элемента, удовлетворяющего предикату | $stream->toFirstMatchKey($predicate, [$default]) |
toLast |
Последний элемент коллекции | $stream->toLast() |
toLastMatch |
Последний элемент, удовлетворяющий предикату | $stream->toLastMatch($predicate, [$default]) |
toLastMatchIndex |
Индекс последнего элемента, удовлетворяющего предикату | $stream->toLastMatchIndex($predicate, [$default]) |
toLastMatchKey |
Ключ последнего элемента, удовлетворяющего предикату | $stream->toLastMatchKey($predicate, [$default]) |
toOnly |
Единственный элемент коллекции | $stream->toOnly() |
toMax |
Максимальное значение из элементов коллекции | $stream->toMax([$compareBy]) |
toMin |
Минимальное значение из элементов коллекции | $stream->toMin([$compareBy]) |
toMinMax |
Минимальное и максимальное значения из элементов коллекции | $stream->toMinMax([$compareBy]) |
toMedian |
Медиана коллекции из потока | $stream->toMedian() |
toMode |
Список мод коллекции из потока | $stream->toMode() |
toVariance |
Дисперсия значений коллекции из потока | $stream->toVariance([$sample]) |
toStandardDeviation |
Стандартное отклонение значений коллекции из потока | $stream->toStandardDeviation([$sample]) |
toPercentile |
Значение коллекции из потока для заданного процентиля | $stream->toPercentile($percentile) |
toQuantile |
Значение коллекции из потока для заданного квантиля | $stream->toQuantile($quantile) |
toNth |
N-й элемент коллекции | $stream->toNth($position) |
toProduct |
Произведение элементов коллекции | $stream->toProduct() |
toString |
Преобразование коллекции в строку | $stream->toString([$separator], [$prefix], [$suffix]) |
toSum |
Сумма элементов коллекции | $stream->toSum() |
toRandomValue |
Случайный элемент из коллекции | $stream->toRandomValue() |
toRange |
Разница между максимальным и минимальным элементами коллекции | $stream->toRange() |
toValue |
Редуцирование коллекции до значения, вычисляемого callback-функцией | $stream->toValue($reducer, $initialValue) |
| Завершающая операция | Описание | Пример кода |
|---|---|---|
toArray |
Возвращает массив из элементов потока | $stream->toArray() |
toAssociativeArray |
Возвращает ассоциативный массив из элементов потока | $stream->toAssociativeArray($keyFunc, $valueFunc) |
toPartition |
Разделяет поток на два списка: истинные и ложные | $stream->toPartition($predicate) |
tee |
Создает несколько одинаковых независимых потоков из данной коллекции | $stream->tee($count) |
| Завершающая операция | Описание | Пример кода |
|---|---|---|
callForEach |
Вызывает callback-функцию для каждого элемента потока | $stream->callForEach($function) |
consume |
Полный обход потока с отбрасыванием значений | $stream->consume() |
print |
print каждого элемента потока |
$stream->print([$separator], [$prefix], [$suffix]) |
printLn |
print каждого элемента потока с новой строки |
$stream->printLn() |
toCsvFile |
Записывает содержимое потока в CSV файл | $stream->toCsvFile($fileHandle, [$headers]) |
toFile |
Записывает содержимое потока в файл | $stream->toFile($fileHandle) |
| Отладочная операция | Описание | Пример кода |
|---|---|---|
peek |
Просмотр каждого элемента коллекции между потоковыми операциями | $stream->peek($peekFunc) |
peekStream |
Просмотр всей коллекции потока между операциями | $stream->peekStream($peekFunc) |
peekPrint |
Печать в поток вывода каждого элемента коллекции между операциями | $stream->peekPrint() |
peekPrintR |
Вызов print_r для каждого элемента коллекции между операциями |
$stream->peekPrintR() |
printR |
print_r каждого элемента потока |
$stream->printR() |
varDump |
var_dump каждого элемента потока |
$stream->varDump() |
Все функции работают с iterable сущностями:
array(тип)Generator(тип)Iterator(интерфейс)Traversable(интерфейс)
IterTools позволяет комбинировать вызовы методов, чтобы получать новые коллекции.
use IterTools\Multi;
use IterTools\Single;
$letters = 'ABCDEFGHI';
$numbers = '123456789';
foreach (Multi::zip(Single::string($letters), Single::string($numbers)) as [$letter, $number]) {
$battleshipMove = new BattleshipMove($letter, $number)
}
// A1, B2, C3use IterTools\Multi;
use IterTools\Single;
$letters = 'abc';
$numbers = '123';
foreach (Multi::chain(Single::string($letters), Single::string($numbers)) as $character) {
print($character);
}
// a, b, c, 1, 2, 3Для методов, которые используют сравнение элементов коллекций для получения результата, по умолчанию сравнения выполняются строго без приведения типов:
- scalars: сравнивает строго по типу;
- objects: всегда считает разные экземпляры неравными;
- arrays: сравнивает сериализованными.
В случае, если метод опционально поддерживает режим приведения типов (имеет аргумент $strict) при $strict установленном в false
либо если метод имеет в названии слово Coercive, он будет работать в нестрогом режиме сравнения:
- scalars: сравнивает нестрого по значению;
- objects: сравнивает сериализованными;
- arrays: сравнивает сериализованными.
IterTools PHP соответствует следующим стандартам:
- PSR-1 - Basic coding standard (http://www.php-fig.org/psr/psr-1/)
- PSR-4 - Autoloader (http://www.php-fig.org/psr/psr-4/)
- PSR-12 - Extended coding style guide (http://www.php-fig.org/psr/psr-12/)
IterTools PHP распространяется по лицензии MIT License.
