chipslays/collection
Why Collection
- 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.
Installation
composer require collection/collection
use Collection\Collection;
$c = new Collection($array);
$c = Collection::make($arrayOrJsonOrIterable);
$c = collection($array); // global helper
Documentation
| 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 |
Contributing
composer test # Pest
composer analyse # PHPStan
Issues and pull requests are welcome!
License
MIT — see LICENSE.md.
Related Packages
iteks/laravel-json
A Laravel package for simplified JSON data manipulation, offering seamless conve...
23,227
4
collector/collector
A collection library inspired by Laravel Collections, built using generators to...
208
15
ricktap/qriteria
Automatic url parameter mapping to sort, filter, include and select data in an e...
44
6
jcrowe/type-safe-collection
A thin wrapper around Illuminate/Collection that allows for enforcing type const...
9,222
4
Version History
| Version | Released | License |
|---|---|---|
| 1.0.0 | MIT |