76 lines
3.4 KiB
Markdown
76 lines
3.4 KiB
Markdown
|
[/statusIcon)](http://halfpastfour.am:8111/viewType.html?buildTypeId=Collection_UnitTesting)
|
||
|
[](https://travis-ci.org/halfpastfouram/collection)
|
||
|
[](https://codeclimate.com/github/halfpastfouram/collection)
|
||
|
[](https://codeclimate.com/github/halfpastfouram/collection/coverage)
|
||
|
[](https://packagist.org/packages/halfpastfouram/collection)
|
||
|
[](https://packagist.org/packages/halfpastfouram/collection)
|
||
|
|
||
|
# Collection
|
||
|
A flexible PHP Collection complete with custom Iterator.
|
||
|
|
||
|
This library is still in active development and will be updated until it is deemed completed.
|
||
|
|
||
|
## What can you do with a collection?
|
||
|
A collection is a tool you can use to have a certain level of control over the data you store inside it. Where you could use an array in most situations a collection provides a more flexible way to deal with your data.
|
||
|
|
||
|
It is particularly useful to extend this class if you need to perform actions on a list of items or objects when they are added, removed, replaced or otherwise modified.
|
||
|
|
||
|
## Control over collections
|
||
|
You can traverse all objects that extend the `Collection` class. To give you more flexibility, all collections in this project extends the `Collection\ArrayAccess` class which provides direct access as if you were talking to an array. This class also provides an iterator that can be used in loops or even manually.
|
||
|
|
||
|
### Array access example
|
||
|
|
||
|
````php
|
||
|
// Assuming MyCollection extends Halfpastfouram\Collection\ArrayAccess
|
||
|
$collection = new MyCollection();
|
||
|
$collection[] = 0;
|
||
|
$collection[5] = 12;
|
||
|
````
|
||
|
|
||
|
### Traversing
|
||
|
|
||
|
````php
|
||
|
foreach( $collection as $key => $value ) {
|
||
|
var_dump( $key, $value );
|
||
|
}
|
||
|
````
|
||
|
|
||
|
### Manual traversing
|
||
|
|
||
|
````php
|
||
|
$collection = new MyCollection();
|
||
|
$iterator = $collection->getIterator();
|
||
|
|
||
|
// Jump forward to next position
|
||
|
$iterator->next();
|
||
|
var_dump( $iterator->current() );
|
||
|
|
||
|
// Go back one position
|
||
|
$iterator->previous();
|
||
|
var_dump( $iterator->getKey(), $iterator->current() );
|
||
|
|
||
|
// Receive the list of keys in the dataset.
|
||
|
var_dump( $iterator->calculateKeyMap() );
|
||
|
````
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
### Using composer
|
||
|
$ composer require halfpastfouram/collection dev-master
|
||
|
|
||
|
### Development
|
||
|
This project uses composer, which should be installed on your system. Most
|
||
|
Linux systems have composer available in their PHP packages.
|
||
|
Alternatively you can download composer from [getcomposer.org](http://getcomposer.org).
|
||
|
|
||
|
If you use the PhpStorm IDE then you can simply init composer through the IDE. However,
|
||
|
full use requires the commandline. See PhpStorm help, search for composer.
|
||
|
|
||
|
To start development, do `composer install` from the project directory.
|
||
|
|
||
|
**Remark** Do not use `composer update` unless you changed the dependency requirements in composer.json.
|
||
|
The difference is that `composer install` will use composer.lock read-only,
|
||
|
while `composer update` will update your composer.lock file regardless of any change.
|
||
|
As the composer.lock file is committed to the repo, other developers might conclude
|
||
|
dependencies have changed, while they have not.
|