jdecool/collection

此包已被弃用且不再维护。未建议替代包。

只是一个集合库

dev-master 2020-12-14 23:24 UTC

This package is auto-updated.

Last update: 2022-02-15 02:03:14 UTC


README

Build Status Latest Stable Version

提供一个流畅的集合库。

可用方法

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])