Саммари о коллекции
May 29, 2026 · View on GitHub
Инструменты для получения булевых характеристик итерируемых коллекций.
All Match
Возвращает истину, если для всех элементов коллекции предикат вернул истину.
Summary::allMatch(iterable $data, callable $predicate): bool
use IterTools\Summary;
$finalFantasyNumbers = [4, 5, 6];
$isOnSuperNintendo = fn ($ff) => $ff >= 4 && $ff <= 6;
$boolean = Summary::allMatch($finalFantasyNumbers, $isOnSuperNintendo);
// true
$isOnPlaystation = fn ($ff) => $ff >= 7 && $ff <= 9;
$boolean = Summary::allMatch($finalFantasyNumbers, $isOnPlaystation);
// false
All Unique
Возвращает истину, все элементы коллекции уникальны.
Summary::allUnique(iterable $data, bool $strict = true): bool
По умолчанию работает в режиме строгой типизации. Установите параметр $strict в false для работы в режиме приведения типов.
use IterTools\Summary;
$items = ['fingerprints', 'snowflakes', 'eyes', 'DNA']
$boolean = Summary::allUnique($items);
// true
Any Match
Возвращает истину, если хотя бы для одного элемента коллекции предикат вернул истину.
Summary::anyMatch(iterable $data, callable $predicate): bool
use IterTools\Summary;
$answers = ['fish', 'towel', 42, "don't panic"];
$isUltimateAnswer = fn ($a) => a == 42;
$boolean = Summary::anyMatch($answers, $isUltimateAnswer);
// true
At Least N
Возвращает истину, если предикат возвращает истину как минимум для N элементов коллекции.
- Предикат является необязательным аргументом.
- По умолчанию предикат выполняет приведение значения элемента коллекции к типу
bool. - Прерывает итерацию сразу после того, как количество совпадений достигнет N.
- При
n <= 0всегда возвращает истину.
Summary::atLeastN(iterable $data, int $n, callable $predicate = null): bool
use IterTools\Summary;
$grades = [45, 50, 61, 72, 85];
$isPassingGrade = fn ($grade) => $grade >= 70;
$boolean = Summary::atLeastN($grades, 2, $isPassingGrade);
// true
$boolean = Summary::atLeastN($grades, 3, $isPassingGrade);
// false
At Most N
Возвращает истину, если предикат возвращает истину не более чем для N элементов коллекции.
- Предикат является необязательным аргументом.
- По умолчанию предикат выполняет приведение значения элемента коллекции к типу
bool. - Прерывает итерацию сразу после того, как количество совпадений превысит N.
- При
n < 0всегда возвращает ложь.
Summary::atMostN(iterable $data, int $n, callable $predicate = null): bool
use IterTools\Summary;
$attempts = [false, false, true, false];
$isFailure = fn ($attempt) => $attempt === false;
$boolean = Summary::atMostN($attempts, 3, $isFailure);
// true
$boolean = Summary::atMostN($attempts, 2, $isFailure);
// false
Are Permutations
Возвращает истину, если коллекции являются перестановками друг друга.
Summary::arePermutations(iterable ...$iterables): bool
use IterTools\Summary;
$iter = ['i', 't', 'e', 'r'];
$rite = ['r', 'i', 't', 'e'];
$reit = ['r', 'e', 'i', 't'];
$tier = ['t', 'i', 'e', 'r'];
$tire = ['t', 'i', 'r', 'e'];
$trie = ['t', 'r', 'i', 'e'];
$boolean = Summary::arePermutations($iter, $rite, $reit, $tier, $tire, $trie);
// true
Are Permutations Coercive
Возвращает истину, если коллекции являются перестановками друг друга (в режиме приведения типов).
Summary::arePermutationsCoercive(iterable ...$iterables): bool
use IterTools\Summary;
$set1 = [1, 2.0, '3'];
$set2 = [2.0, '1', 3];
$set3 = [3, 2, 1];
$boolean = Summary::arePermutationsCoercive($set1, $set2, $set3);
// true
Contains
Возвращает истину, если коллекция содержит искомое значение, при строгом сравнении типов.
Summary::contains(iterable $data, mixed $needle): bool
- Скаляры сравниваются строго по типу (
1не равно'1';0не равноfalse). - Для объектов совпадает только один и тот же экземпляр.
- Массивы сравниваются через
===. NaNникогда не совпадает сNaN(так какNaN !== NaN).- Обрывает итерацию при первом совпадении.
use IterTools\Summary;
$primes = [2, 3, 5, 7, 11, 13];
$boolean = Summary::contains($primes, 7);
// true
$boolean = Summary::contains($primes, 4);
// false
$boolean = Summary::contains($primes, '7');
// false (строгое сравнение)
Contains Coercive
Возвращает истину, если коллекция содержит искомое значение, в режиме приведения типов.
Summary::containsCoercive(iterable $data, mixed $needle): bool
- Скаляры сравниваются нестрого по значению (
1совпадает с'1';0совпадает сfalse;'1e2'совпадает с100). - Объекты сравниваются по сериализованному значению (бросает
\InvalidArgumentException, если искомое значение или элемент коллекции не сериализуется). - Массивы сравниваются по сериализованному значению.
NaNсовпадает сNaN(согласованно с другими операциями приведения типов в библиотеке).- Обрывает итерацию при первом совпадении: несериализуемый элемент встретится только при отсутствии совпадений до него.
use IterTools\Summary;
$primes = [2, 3, 5, 7, 11, 13];
$boolean = Summary::containsCoercive($primes, '7');
// true (приведение типов)
$boolean = Summary::containsCoercive([100, 200, 300], '1e2');
// true
Ends With
Возвращает истину, если коллекция заканчивается заданным суффиксом (при строгом сравнении типов).
- Сравнение значений идёт попарно; ключи игнорируются.
- Пустой суффикс возвращает истину без потребления исходной коллекции.
- И исходная коллекция, и суффикс должны быть конечными.
Summary::endsWith(iterable $data, iterable $suffix): bool
use IterTools\Summary;
$path = ['var', 'log', 'nginx', 'access.log'];
$boolean = Summary::endsWith($path, ['access.log']);
// true
$boolean = Summary::endsWith($path, ['nginx', 'access.log']);
// true
$boolean = Summary::endsWith($path, ['error.log']);
// false
Ends With Coercive
Возвращает истину, если коллекция заканчивается заданным суффиксом (в режиме приведения типов).
- Сравнение значений идёт попарно; ключи игнорируются.
- Пустой суффикс возвращает истину без потребления исходной коллекции.
- И исходная коллекция, и суффикс должны быть конечными.
- Нестрогое сравнение значений:
- скаляры: сравниваются нестрого по значению (
1совпадает с'1',0совпадает сfalse) - объекты: сравниваются по сериализованному значению (бросает
\InvalidArgumentException, если значение не сериализуется) - массивы: сравниваются по сериализованному значению
NaNсовпадает сNaN
- скаляры: сравниваются нестрого по значению (
Summary::endsWithCoercive(iterable $data, iterable $suffix): bool
use IterTools\Summary;
$digits = [1, 2, 3];
$boolean = Summary::endsWithCoercive($digits, ['2', '3']);
// true (приведение типов)
$boolean = Summary::endsWith($digits, ['2', '3']);
// false (строгое сравнение)
Exactly N
Истинно, если предикат возвращает истину в точности для N элементов.
- Предикат является необязательным аргументом.
- По умолчанию предикат выполняет приведение значения элемента коллекции к типу
bool.
Summary::exactlyN(iterable $data, int $n, callable $predicate): bool
use IterTools\Summary;
$twoTruthsAndALie = [true, true, false];
$n = 2;
$boolean = Summary::exactlyN($twoTruthsAndALie, $n);
// true
$ages = [18, 21, 24, 54];
$n = 4;
$predicate = fn ($age) => $age >= 21;
$boolean = Summary::isSorted($ages, $n, $predicate);
// false
Is Partitioned
Возвращает истину, если все истинные элементы находятся в коллекции перед ложными (истинность определяет предикат).
- Возвращает истину для пустой коллекции и для коллекции с одним элементом.
- Если предикат не был передан, истинность элемента получается через приведение его значения к булевому типу.
Summary::isPartitioned(iterable $data, callable $predicate = null): bool
use IterTools\Summary;
$numbers = [0, 2, 4, 1, 3, 5];
$evensBeforeOdds = fn ($item) => $item % 2 === 0;
$boolean = Summary::isPartitioned($numbers, $evensBeforeOdds);
Is Empty
Возвращает истину, если данная коллекция пуста.
Summary::isEmpty(iterable $data): bool
use IterTools\Summary;
$data = []
$boolean = Summary::isEmpty($data);
// true
Is Sorted
Возвращает истину, если коллекция отсортирована в прямом порядке.
- Элементы должны быть сравнимы.
- Для пустой коллекции или коллекции из одного элемента всегда возвращает истину.
Summary::isSorted(iterable $data): bool
use IterTools\Summary;
$numbers = [1, 2, 3, 4, 5];
$boolean = Summary::isSorted($numbers);
// true
$numbers = [3, 2, 3, 4, 5];
$boolean = Summary::isSorted($numbers);
// false
Is Reversed
Возвращает истину, если коллекция отсортирована в обратном порядке.
- Элементы коллекции должны быть сравнимы.
- Для пустой коллекции или коллекции из одного элемента всегда возвращает истину.
Summary::isReversed(iterable $data): bool
use IterTools\Summary;
$numbers = [5, 4, 3, 2, 1];
$boolean = Summary::isReversed($numbers);
// true
$numbers = [1, 4, 3, 2, 1];
$boolean = Summary::isReversed($numbers);
// false
Is Sorted By
Возвращает истину, если значения, вычисленные функцией-ключом, упорядочены по неубыванию (по возрастанию).
- Вычисленные значения должны быть сравнимы.
- Для пустой коллекции или коллекции из одного элемента всегда возвращает истину.
Summary::isSortedBy(iterable $data, callable $keyFunc): bool
use IterTools\Summary;
$people = [
(object)['name' => 'Alice', 'age' => 25],
(object)['name' => 'Bob', 'age' => 30],
(object)['name' => 'Carol', 'age' => 42],
];
$boolean = Summary::isSortedBy($people, fn ($person) => $person->age);
// true
Is Reversed By
Возвращает истину, если значения, вычисленные функцией-ключом, упорядочены по невозрастанию (по убыванию).
- Вычисленные значения должны быть сравнимы.
- Для пустой коллекции или коллекции из одного элемента всегда возвращает истину.
Summary::isReversedBy(iterable $data, callable $keyFunc): bool
use IterTools\Summary;
$people = [
(object)['name' => 'Carol', 'age' => 42],
(object)['name' => 'Bob', 'age' => 30],
(object)['name' => 'Alice', 'age' => 25],
];
$boolean = Summary::isReversedBy($people, fn ($person) => $person->age);
// true
None Match
Возвращает истину, если для всех элементов коллекции предикат вернул ложь.
Summary::noneMatch(iterable $data, callable $predicate): bool
use IterTools\Summary;
$grades = [45, 50, 61, 0];
$isPassingGrade = fn ($grade) => $grade >= 70;
$boolean = Summary::noneMatch($grades, $isPassingGrade);
// true
Same
Истинно, если данные коллекции одинаковы.
Если в метод передать одну коллекцию или ни одной, он вернет истину.
Summary::same(iterable ...$iterables): bool
use IterTools\Summary;
$cocaColaIngredients = ['carbonated water', 'sugar', 'caramel color', 'phosphoric acid'];
$pepsiIngredients = ['carbonated water', 'sugar', 'caramel color', 'phosphoric acid'];
$boolean = Summary::same($cocaColaIngredients, $pepsiIngredients);
// true
$cocaColaIngredients = ['carbonated water', 'sugar', 'caramel color', 'phosphoric acid'];
$spriteIngredients = ['carbonated water', 'sugar', 'citric acid', 'lemon lime flavorings'];
$boolean = Summary::same($cocaColaIngredients, $spriteIngredients);
// false
Same Count
Истинно, если данные коллекции имеют одинаковую длину.
Если в метод передать одну коллекцию или ни одной, он вернет истину.
Summary::sameCount(iterable ...$iterables): bool
use IterTools\Summary;
$prequels = ['Phantom Menace', 'Attack of the Clones', 'Revenge of the Sith'];
$originals = ['A New Hope', 'Empire Strikes Back', 'Return of the Jedi'];
$sequels = ['The Force Awakens', 'The Last Jedi', 'The Rise of Skywalker'];
$boolean = Summary::sameCount($prequels, $originals, $sequels);
// true
$batmanMovies = ['Batman Begins', 'The Dark Knight', 'The Dark Knight Rises'];
$matrixMovies = ['The Matrix', 'The Matrix Reloaded', 'The Matrix Revolutions', 'The Matrix Resurrections'];
$result = Summary::sameCount($batmanMovies, $matrixMovies);
// false
Starts With
Возвращает истину, если коллекция начинается с заданного префикса (при строгом сравнении типов).
- Сравнение значений идёт попарно; ключи игнорируются.
- Пустой префикс возвращает истину без потребления исходной коллекции.
Summary::startsWith(iterable $data, iterable $prefix): bool
use IterTools\Summary;
$path = ['var', 'log', 'nginx', 'access.log'];
$boolean = Summary::startsWith($path, ['var']);
// true
$boolean = Summary::startsWith($path, ['var', 'log']);
// true
$boolean = Summary::startsWith($path, ['etc']);
// false
Starts With Coercive
Возвращает истину, если коллекция начинается с заданного префикса (в режиме приведения типов).
- Сравнение значений идёт попарно; ключи игнорируются.
- Пустой префикс возвращает истину без потребления исходной коллекции.
- Нестрогое сравнение значений:
- скаляры: сравниваются нестрого по значению (
1совпадает с'1',0совпадает сfalse) - объекты: сравниваются по сериализованному значению (бросает
\InvalidArgumentException, если значение не сериализуется) - массивы: сравниваются по сериализованному значению
NaNсовпадает сNaN
- скаляры: сравниваются нестрого по значению (
Summary::startsWithCoercive(iterable $data, iterable $prefix): bool
use IterTools\Summary;
$digits = [1, 2, 3];
$boolean = Summary::startsWithCoercive($digits, ['1', '2']);
// true (приведение типов)
$boolean = Summary::startsWith($digits, ['1', '2']);
// false (строгое сравнение)