jdecool / collection
此包已被弃用且不再维护。未建议替代包。
只是一个集合库
dev-master
2020-12-14 23:24 UTC
Requires
- php: ^7.3|^8.0
- ext-json: *
Requires (Dev)
- atoum/atoum: ^4.0
- atoum/stubs: ^2.6
This package is auto-updated.
Last update: 2022-02-15 02:03:14 UTC
README
提供一个流畅的集合库。
可用方法
all
获取集合中的所有项
$collection = new Collection([0, 1, 2, 3]); $collection->all(); // [0, 1, 2, 3]
contains
确定一个项目是否存在于集合中
$collection = new Collection([0, 1, 2, 3]); $collection->contains(1); // true $collection->contains(5); // false
count
计算集合中项目的数量
$collection = new Collection(); $collection->count(); // 0 $collection = new Collection([0, 1, 2, 3]); $collection->count(); // 4
diff
计算集合中项目的差异
$collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'jane' => 'doe']); $collection->diff('foo'); // Collection(['foo' => 'bar', 'john' => 'doe', 'jane' => 'doe']) $collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'jane' => 'doe']); $collection->diff('doe'); // Collection(['foo' => 'bar'])
diffKeys
计算集合中键的差异
$collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'jane' => 'doe']); $collection->diffKeys('foo'); // Collection(['foo' => 'bar', 'john' => 'doe', 'jane' => 'doe']) $collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'jane' => 'doe']); $collection->diffKeys('foo' => 'bar'); // Collection(['john' => 'doe', 'jane' => 'doe'])
filter
过滤集合
$collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'test' => 'bar']); $collection->filter(function($item) { return $item === 'bar'; }); // Collection(['foo' => 'bar', 'test' => 'bar'])
first
搜索第一个元素
$collection = new Collection([ ['a' => '1', 'foo' => 'a'], ['a' => '2', 'foo' => 'b'], ['a' => '3', 'foo' => 'c'], ['a' => '4', 'foo' => 'b'], ]); $collection->first(); // ['a' => '1', 'foo' => 'a'] $collection->first(function($item) { return $item['foo'] === 'b'; }); // ['a' => '2', 'foo' => 'b'] $collection->first(/* ... */, 'default value if not found')
flip
交换数组中所有键与其关联的值
$collection = new Collection(['foo' => 'bar', 'john' => 'doe']); $collection->flip(); // Collection(['bar' => 'foo', 'doe' => 'john'])
get
从集合中获取一个项目
$collection = new Collection(['foo' => 'bar', 'john' => 'doe']); $collection->get('foo'); // 'bar' $collection->get('bar'); // null $collection->get('bar', 'myDefaultValue'); // 'myDefaultValue'
has
确定一个键是否存在于集合中
$collection = new Collection(['foo' => 'bar', 'john' => 'doe']); $collection->has('foo'); // true $collection->has('bar'); // false
isEmpty
检查集合是否为空
$collection = new Collection(['foo' => 'bar', 'john' => 'doe']); $collection->isEmpty(); // false
keys
获取集合中的所有键
$collection = new Collection(['foo' => 'bar', 'john' => 'doe']); $collection->keys(); // Collection(['foo', 'john'])
last
搜索最后一个元素
$collection = new Collection([ ['a' => '1', 'foo' => 'a'], ['a' => '2', 'foo' => 'b'], ['a' => '4', 'foo' => 'b'], ['a' => '3', 'foo' => 'c'], ]); $collection->last(); // ['a' => '3', 'foo' => 'c'] $collection->last(function($item) { return $item['foo'] === 'b'; }); // ['a' => '4', 'foo' => 'b'] $collection->last(/* ... */, 'default value if not found')
map
将回调应用到给定数组中的元素
$collection = new Collection([0, 1, 2, 3]); $collection->map(function($item) { return $item + 10; }); // Collection([10, 11, 12, 13])
reduce
将数组缩减为一个值
function sum($carray, $item) { return $carray + $item; } $collection = new Collection([0, 1, 2, 3]); $collection->reduce('sum'); // 6 $collection = new Collection([ [ 'note' => 5, 'coeff' => 1, ], [ 'note' => 8, 'coeff' => 2, ], ]); $collection->reduce(function ($carry, $item) { return $carry + $item['note']; }); // 13
reject
创建一个不含元素的集合
$collection = new Collection([0, 1, 2, 3]); $collection->reject(function($item) { return $item === 1; }); // Collection([0, 2, 3]) $collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'test' => 'bar']); $collection->reject(function($item) { return $item === 'bar'; }); // Collection(['john' => 'doe'])
sort
对项目进行排序
$collection = new Collection([3, 0, 2, 1]); $collection->sort(); // Collection([0, 1, 2, 3]) $collection = new Collection(['foo' => 'bar', 'john' => 'doe', 'test' => 'bar']); $collection->reject(function($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? 1 : -1; }); // Collection([3, 2, 1, 0])