-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Slice
github-actions[bot] edited this page Jul 16, 2026
·
1 revision
Разбиение коллекции на части: slice/take*/skip*/nth, chunk/split/partition,
groupBy/keyBy/countBy.
chunk/split/partition/groupBy возвращают коллекции полноценных вложенных
коллекций — к каждой группе сразу применима вся цепочка методов. groupBy/keyBy/
countBy принимают имя поля (извлечение через dataGet: массивы и объекты) либо
callback.
use CloudCastle\Collection\Collection;
$c = Collection::make([1, 2, 3, 4, 5]);
$c->take(2); // [1, 2]
$c->take(-2); // [4, 5]
$c->skipWhile(fn ($v) => $v < 3); // [3, 4, 5]
$c->nth(2); // [1, 3, 5]
$c->chunk(2); // [[1, 2], [3, 4], [5]] — каждая часть Collection
$c->split(4); // ceil(5/4)=2 → группы 2+2+1
[$even, $odd] = $c->partition(fn ($v) => $v % 2 === 0)->all();
$orders = Collection::make([
['status' => 'paid', 'total' => 150],
['status' => 'pending', 'total' => 70],
['status' => 'paid', 'total' => 220],
]);
$orders->groupBy('status'); // ['paid' => Collection(2), 'pending' => Collection(1)]
$orders->keyBy('status'); // последний с тем же ключом выигрывает
$orders->countBy(fn ($o) => $o['status']); // ['paid' => 2, 'pending' => 1]- Вложенные коллекции:
groupBy('x')->map(fn ($g) => $g->sum('y'))— без ручных циклов. -
groupByпо полю — быстрейший среди аналогов (см. Сравнение). -
splitделит на равные группы черезceil— без пустых хвостов.
- Обёртка каждой группы в коллекцию дороже сырых массивов:
chunkуaimeos/mapбыстрее в ~2× именно потому, что не оборачивает. Это осознанный размен на богатство API.
- Отчёты «агрегат по группе» — через
groupBy(...)->map(fn ($g) => $g->sum(...)). - Пагинацию больших выборок — через
chunk(N)c обработкой частей. -
keyBy('id')для O(1)-доступа по идентификатору вместо повторныхfirstWhere.
-
chunkдля потоковой обработки миллионов строк из БД — читайте курсором из источника, коллекция держит все элементы в памяти. - Ручное
foreach+$groups[$k][] = …вместоgroupBy— теряете цепочку и читаемость.
CloudCastle Collection · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)