palmtree/easy-collection

此包已被废弃,不再维护。作者建议使用 palmtree/collection 包。

不可变集合,提供数组中缺少的常用功能

v2.1.0 2022-12-16 09:46 UTC

README

🌴 Easy Collection

License Build

不可变集合,提供数组中缺少的常用功能。

要求

  • PHP >= 8.1

安装

使用 composer 将此包添加到您的依赖项

composer require palmtree/easy-collection

用法

大部分情况下,集合可以像数组一样使用。它们实现了 ArrayAccessTraversableCountable

use function Palmtree\EasyCollection\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\EasyCollection\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);

还提供了许多其他方法。阅读文档中的 源代码 了解更多。

泛型

此库支持模板注解,以便用于 Psalm 和 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
}

许可

MIT 许可证 下发布。