https://github.com/bolt/collection
Object Orientated implementations of arrays
https://github.com/bolt/collection
Last synced: 7 months ago
JSON representation
Object Orientated implementations of arrays
- Host: GitHub
- URL: https://github.com/bolt/collection
- Owner: bolt
- License: mit
- Created: 2017-04-13T12:37:37.000Z (over 8 years ago)
- Default Branch: 1.1
- Last Pushed: 2017-11-28T18:27:29.000Z (about 8 years ago)
- Last Synced: 2025-06-02T17:59:15.225Z (7 months ago)
- Language: PHP
- Size: 176 KB
- Stars: 12
- Watchers: 13
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Bolt Collection
[](https://travis-ci.org/bolt/collection)
[](https://codecov.io/gh/bolt/collection)
This library provides objects and functionality to help with groups of items and data sets.
Check out the [API documentation][api-docs].
## `Bag` and `MutableBag`
These are object-oriented implementations of arrays.
The goal of these classes:
- Provide functionality on par with built-in array methods
- Provide useful functionality lacking from built-in array methods
- Provide a fluent-like experience
- Make implementing code more readable
### Examples
```php
$arr = [
'debug' => true,
'color' => 'blue',
'db' => [
'driver' => 'sqlite',
],
];
$bag = Bag::from($arr)
->defaults([
'debug' => false,
'color' => 'green',
])
->replace([
'color' => 'red',
])
;
$bag->get('debug'); // true
$bag->getPath('db/driver'); // "sqlite"
$bag->keys()->join(', '); // "debug, color, db"
$bag->isAssociative(); // true
```
```php
$colors = MutableBag::of('red', 'blue', 'yellow')
->merge(['green', 'orange'])
;
$colors->isIndexed(); // true
$colors->indexOf('yellow'); // 2
$colors[2]; // "yellow"
$colors->prepend('purple');
$colors[] = 'pink';
$colors->first(); // "purple"
$colors->last(); // "pink"
$colors->shuffle()->first(); // one of the colors
$colors->chunk(2); // Bags represented as arrays:
// [ ['purple', 'red'], ['blue', 'yellow'], ['green, 'orange'], ['pink'] ]
$colors->removeFirst(); // "purple"
$colors->removeFirst(); // "red"
```
These examples only cover half of the functionality. See the [API documentation][api-docs] for more.
All methods accepting a collection will accept other `Bags`, `arrays`,
`stdClass`, and `Traversable` objects. This makes it very easy work with any
collection-like object.
### Hasn't this been done already?
Obviously others think PHP arrays suck as well and have attempted to resolve
this.
Symfony's `ParameterBag` is a good basic _map_ (associative arrays) container
but is lacking when it comes to mutating the items around and working with
lists.
Doctrine's `ArrayCollection` is also another, more robust, option. It works
well for maps and lists, but still has limited functionality due to needing to
interface with a database collection. It also has some annoyances, like
`getKeys()` returns an `array` instead of another `ArrayCollection` instance.
[api-docs]: https://docs.bolt.cm/api/bolt/collection/master/classes.html