Skip to content

🌴 Immutable collections which provide commonly used functionality missing from arrays

License

Notifications You must be signed in to change notification settings

palmtreephp/collection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7ea4f7d Â· Nov 17, 2023
Nov 15, 2023
Nov 15, 2023
Aug 13, 2023
Aug 13, 2023
Aug 13, 2023
Aug 13, 2023
Aug 13, 2023
Aug 13, 2023
Aug 13, 2023
Aug 13, 2023
Nov 15, 2023
Nov 17, 2023
Aug 13, 2023
Nov 17, 2023
Aug 13, 2023

Repository files navigation

🌴 Palmtree Collection

License Build Packagist Version

Immutable collections which provide commonly used functionality missing from arrays.

Requirements

  • PHP >= 8.1

Installation

Use composer to add the package to your dependencies:

composer require palmtree/collection

Usage

Collections can be used just like arrays for the most part. They implement ArrayAccess, Traversable and Countable:

use function Palmtree\Collection\c;

$collection = c(['foo' => 'bar', 'baz' => 'qux']);

$foo = $collection['foo'];
$collection['baz2'] = 'qux';

isset($collection['baz']); // true
unset($collection['baz']);
count($collection);

foreach ($collection as $key => $value) {
    // do stuff with value and/or key
}

// find returns the first matching element
$foo = $collection->find(fn ($v) => $v === 'bar');

// filter returns a new filtered collection
$quxCollection = $collection->filter(fn ($v) => $v === 'qux');
use function Palmtree\Collection\c;

$collection = c([1, 9, 5, 3, 7, 10])
    ->sort()
    ->filter(fn ($i) $i < 10)
    ->values()

// returns true as every element remaining in the collection is odd
$isAllOdd = $collection->every(fn ($i) => $i % 2 !== 0);
// returns false as it was removed in our filter
$collection->contains(10);

// returns true as at least one of the elements is false
c([true, true, false, true, true])->some(fn ($v) => !$v);

Many other methods are provided. Read through the documented source code to see more.

Generics

The library supports template annotations for use by static analysers such as Psalm and PHPStan:

/** @var Collection<int, Foo> **/
$collection = new Collection();
$collection->add(new Foo());

foreach ($collection as $foo) {
    // Psalm/PHPStan and PhpStorm know that $foo is an instance of Foo here
}

License

Released under the MIT license

About

🌴 Immutable collections which provide commonly used functionality missing from arrays

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages