Laravel-style collections for any PHP project β with dot-notation paths in every method.
- Paths everywhere.
get,set,where,sortBy,groupBy,sum,pluckand dozens of other methods accept paths likeuser.address.city,users.*.email,users[?active].emailor**.email. Paths go through arrays, objects and nested collections β and stay close to hand-written loops in speed. - Reshape data in one call.
rename()andremap()move fields into the structure you need;cast()converts types with built-in casters, enums, classes, callbacks or your ownCaster. - The Laravel API you already know. Every method of
Illuminate\Support\Collection, with the same names and behaviour β but no framework required. What is different π€ - You stay in control. Methods that wrap PHP functions expose their options:
SORT_*flags, JSON flags and depth,preserveKeys, a seededRandom\Randomizer, rounding modes. - No surprises. Transforming methods return a new collection; the few that change data in place are clearly listed. Strings are never called as functions by accident.
- Zero dependencies. PHP 8.4+, one package, fully tested and statically analysed.
composer require collection/collectionuse Collection\Collection;
$c = new Collection($array);
$c = Collection::make($arrayOrJsonOrIterable);
$c = collection($array); // global helper| Section | Description |
|---|---|
| Getting Started | creating collections, conventions, exceptions, subclassing |
| Paths: Dot-Notation & Wildcards | user.name, users.*.email, users.*[id], users[?age>18], **.email, objects, escaping dots |
| Reading, Writing & Converting | get, set, has, forget, push, toJson⦠|
| Filtering & Finding | where, filter, first, sole, contains, unique⦠|
| Transforming | map, pluck, mapPath, flatten, toTree, reduce⦠|
| Reshaping: rename, remap & cast | rename/move keys, build new structures, convert types |
| Sorting & Grouping | sortBy, groupBy, keyBy, countBy, partition |
| Aggregates | sum, avg, median, mode, percentage⦠|
| Slicing, Chunking & Randomness | slice, chunk, paginate, sliding, random⦠|
| Combining Collections | merge, diff, intersect, zip, crossJoin⦠|
| Pipelines, Macros & Debugging | pipe, when, higher-order messages, macros, dump |
| Coming from Laravel | what is the same and what is different |
composer test # Pest
composer analyse # PHPStanIssues and pull requests are welcome!
MIT β see LICENSE.md.