Collections is a simple and light-weight PHP collections class to help facilitate and ease the means of working with data arrays in an OOP oriented manner.
Axiom Collections requires PHP 7.0 or later. It is not tested against HHVM or older (supported) versions of PHP, but there is nothing in this package (other than PHPUnit) that should cause a failure. Keep in mind that support is not guaranteed in these situations.
It is recommended that you install the package using Composer.
$ composer require axiom/collections
This package is compliant with PSR-1, PSR-2, and PSR-4. If you find any compliance oversights, please send a patch via pull request.
You have a couple options for creating a new Collection instance.
One, by simply creating a new instance of the class directly:
$collection = new \Axiom\Collections\Collection([1, 2, 3]);
Or two, but using the make
static helper method:
$collection = Collection::make([1, 2, 3]);
For the remainder of this documentation, we will run through each of the available methods provided by the Collection class. All of these methods may be chained together to fluently manipulate the underlying array of data. And lastly, in almost every case, each method will return a new Collections
instance, preserving the original copy of the collection where necessary.
The all
method retrieves all the items from the collection.
Collection::make([1, 2, 3])->all();
// [1, 2, 3]
The count
method returns the total number of items in the collection:
$collection = Collection::make([1, 2, 3, 4]);
$collection->count();
// 4
The each
method iterates over the items in the collection and passes each item through a callback:
$collection = $collection->each(function($item, $key) {
//
});
To stop iterating over the items and break out of the loop, simply return false
from your callback:
$collection = $collection->each(function($item, $key) {
if ($someCondition === true) {
return false;
}
});
The exists
method determines if the given key exists in the collection.
$collection = Collection::make(['bot_id' => 1, 'name' => 'Loki']);
$collection->exists('name');
// true
The filter
method filters the collection using the given callback, keeping only those items that pass a given truth test:
$collection = Collection::make([1, 2, 3, 4]);
$filtered = $collection->filter(function($item, $key) {
return $value > 2;
});
$filtered->all();
// [3, 4]
For the inverse of filter
, see the reject
method.
The first
method returns the first element in the collection.
Collection::make([1, 2, 3, 4])->first();
// 1
The flatten
method returns a new Collection instance containing a flattened array of items.
$collection = Collection::make([
'name' => 'Kai',
'profile' => [
'age' => 28,
'favorite_games' => ['Mass Effect', 'Oxygen Not Included', 'event[0]']
]
]);
$result = $collection->flatten();
$result->all();
// ['Kai', 28, 'Mass Effect', 'Oxygen Not Included', 'event[0]']
The get
method returns the item at a given key.
$collection = Collection::make(['foo' => 'bar', 'lorem' => 'ipsum']);
$result = $collection->get('lorem');
// ipsum
The groupBy
method returns a new Collection instance of items grouped an associative array using a callback.
$collection = Collection::make([
'foo' => ['type' => 'foobar'],
'bar' => ['type' => 'foobar'],
'lorem' => ['type' => 'lorem ipsum'],
'ipsum' => ['type' => 'lorem ipsum']
]);
$result = $collection->groupBy(function($item) {
return $item['type'];
});
$result->all();
//
[
'foobar' => [
'foo' => ['type' => 'foobar'],
'bar' => ['type' => 'foobar'],
],
'lorem ipsum' => [
'lorem' => ['type' => 'lorem ipsum'],
'ipsum' => ['type' => 'lorem ipsum']
]
]
The keys
method returns a new Collection instance containing all the keys of the collection items.
$collection = Collection::make(['foo' => 'bar', 'lorem' => 'ipsum']);
$result = $collection->keys();
$result->all();
// ['foo', 'lorem']
The last
method returns the last element in the collection.
Collection::make([1, 2, 3, 4])->last();
// 4
The map
method iterates through the collection and passes each valye and key to the given callback. The callback is free to modify the item and return it, thus forming a new collection of modified items:
$collection = Collection::make([1, 2, 3, 4, 5]);
$multiplied = $collection->map(function($item, $key) {
return $item * 2;
});
$multiplied->all();
// [2, 4, 6, 8, 10]
the push
method appends an item to the end of the collection.
$collection = Collection::make([1, 2, 3, 4]);
$collection->push(5);
$collection->all();
// [1, 2, 3, 4, 5]
The put
method sets the given key and value in the collection.
$collection = Collection::make(['bot_id' => 1, 'name' => 'Odin']);
$collection->put('name', 'Loki');
$collection->all();
// ['bot_id' => 1, 'name' => 'Loki']
The reject
method filters the collection using the given callback. The callback should return true
is the items should be removed from the resulting collection.
$collection = Collection::make([1, 2, 3, 4]);
$filtered = $collection->reject(function($item, $key) {
return $value > 2;
});
$filtered->all();
// [1, 2]
The remove
method removes an item rom the collection by its key.
$collection = Collection::make([0, 1, 2, 3]);
$collection->remove(0);
$collection->all();
// [1, 2, 3]
The reverse
method reverses the collection items.
$collection = Collection::make([4, 1, 2, 3, 5])->reverse()->values()->all();
// [5, 3, 2, 1, 4]
$collection = Collection::make([4, 1, 2, 3, 5])->sort()->reverse()->values()->all();
// [5, 4, 3, 2, 1]
The sort
method sorts the collection of items by their values in ascending order or optionally through a user-defined comparison function.
$data = [4, 1, 2, 3, 5];
$collection = Collection::make($data)->sort()->values()->all();
// [1, 2, 3, 4, 5]
$collection = Collection::make($data)->sort(function($a, $b) {
if ($a === $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
})->values()->all();
// [1, 2, 3, 4, 5]
The sortByKey
method sorts the collection of items by their keys in ascending order or optionally through a user-defined comparison function.
$data = [
'foo4' => 1,
'foo2' => 2,
'foo5' => 3,
'foo3' => 4,
'foo1' => 5
];
$collection = Collection::make($data)->sortByKey()->values()->all();
// [5, 2, 4, 1, 3]
$collection = Collection::make($data)->sortByKey(function($a, $b) {
if ($a === $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
})->values()->all();
// [5, 2, 4, 1, 3]
The values
method returns a new Collection instance containing all the values of the collection items.
$collection = Collection::make(['foo' => 'bar', 'lorem' => 'ipsum']);
$result = $collection->values();
$result->all();
// ['bar', 'ipsum']