chipslays / collection
Laravel-compatible PHP collection with dot-notation and wildcard paths in every method. Zero dependencies.
1.0.0
2021-01-13 17:25 UTC
Requires
- chipslays/array: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Laravel-style collections for any PHP project — with dot-notation paths in every method.
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.