astronphp/collection

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

内置类型数组的更好抽象

0.0.1 2019-09-17 18:43 UTC

This package is auto-updated.

Last update: 2022-03-30 00:16:20 UTC


README

安装

composer require astronphp/collection

用户指南

construct

public function __construct($content = [])

可选地接受一个数组或对象,将内部转换为。

use Astronphp\Collection\Collection;

$collection1 = new Collection();
$collection2 = new Collection(['lorem' => 'ipsum']);
$collection3 = new Collection(new \DateTime('now'));

var_dump($collection1, $collection2, $collection3);

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => array (size = 0)
  protected 'length'  => int 0

object(Astronphp\Collection\Collection)[2]
  protected 'content' => array (size=1)
    'lorem' => string 'ipsum' (length=5)
  protected 'length' => int 1

object(Astronphp\Collection\Collection)[4]
  protected 'content' => array (size=3)
      'date' => string '2019-09-17 14:42:47.000000' (length=26)
      'timezone_type' => int 3
      'timezone' => string 'UTC' (length=3)
  protected 'length' => int 3
*/

unshift

public function unshift(...$values): self

在集合开头添加值。

use Astronphp\Collection\Collection;

$collection = new Collection();
$collection->unshift('lorem');
$collection->unshift('ipsum', 'dolor');

var_dump($collection);

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=3)
      0 => string 'ipsum' (length=5)
      1 => string 'dolor' (length=5)
      2 => string 'lorem' (length=5)
  protected 'length' => int 3
*/

push

public function push(...$values): self

在集合末尾添加值。

use Astronphp\Collection\Collection;

$collection = new Collection();
$collection->push('lorem');
$collection->push('ipsum', 'dolor');

var_dump($collection);

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=3)
      0 => string 'lorem' (length=5)
      1 => string 'ipsum' (length=5)
      2 => string 'dolor' (length=5)
  protected 'length' => int 3
*/

set

public function set(string $key, $value): self

将键关联到值。

use Astronphp\Collection\Collection;

$collection = new Collection();
$collection->set('lorem', 'ipsum');
$collection->set('dolor.amet', 'consectetur');

var_dump($collection);

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=2)
      'lorem' => string 'ipsum' (length=5)
      'dolor' => 
        array (size=1)
          'amet' => string 'consectetur' (length=11)
  protected 'length' => int 2
*/

get

public function get(string $key)

从集合中检索值

use Astronphp\Collection\Collection;

$collection = new Collection();
$collection->set('lorem', 'ipsum');
$collection->set('dolor.amet', 'consectetur');

$collection->get('lorem'); // ipsum
$collection->get('dolor.amet'); // consectetur

isset

public function isset(string $key): bool

检查未初始化的键或值为null的键

use Astronphp\Collection\Collection;

$collection = new Collection();
$collection->set('lorem', 'ipsum');

$collection->isset('lorem'); // true
$collection->isset('dolor'); // false

empty

public function empty(string $key): bool

检查空键

use Astronphp\Collection\Collection;

$collection = new Collection();

$collection->set('lorem', 1);
$collection->set('ipsum', 0);

$collection->empty('lorem'); // false
$collection->empty('ipsum'); // true

unset

public function unset(string $key)

删除键

use Astronphp\Collection\Collection;

$collection = new Collection();
$collection->set('lorem', 'ipsum');

var_dump($collection);

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=1)
      'lorem' => string 'ipsum' (length=5)
  protected 'length' => int 1
*/

$collection->unset('lorem');

var_dump($collection);

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=0)
      empty
  protected 'length' => int 0
*/

length

public function length(): int

检索集合的大小

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->length(); // 5

shift

public function shift()

从集合中移除第一个元素,返回被移除的元素

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->shift(); // 1

pop

public function pop()

从集合中移除最后一个元素,返回被移除的元素

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->pop(); // 5

first

public function first()

检索集合的第一个项

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->first(); // 1

last

检索集合的最后一个项

public function last()
use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->last(); // 5

each

public function each(callable $callback)

遍历整个集合

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem' => 'ipsum', 'dolor' => 'amet']);
$collection->each(function($key, $value) {
    var_dump($key, $value);
});

/*
string 'lorem' (length=5)
string 'ipsum' (length=5)

string 'dolor' (length=5)
string 'amet' (length=4)
*/

for

public function for(int $start, int $step, callable $callback)

按步遍历集合

use Astronphp\Collection\Collection;

$collection = new Collection([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$collection->for(0, 2, function($key, $value) {
    var_dump($value);
});

/* int 0, int 2, int 4, int 6, int 8, int 10 */

walk

递归遍历集合

public function walk(callable $callback, $type = \RecursiveIteratorIterator::LEAVES_ONLY)
use Astronphp\Collection\Collection;

$collection = new Collection(['lorem', ['ipsum', 'dolor'], ['sit' => ['amet' => 'consectetur']]]);
$collection->walk(function($key, $value) {
    var_dump($key, $value);
});

/*
int 0
string 'lorem' (length=5)
int 0
string 'ipsum' (length=5)
int 1
string 'dolor' (length=5)
string 'amet' (length=4)
string 'consectetur' (length=11)
*/

sum

public function sum()

计算集合中所有元素的总和

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->sum(); // 15

contains

public function contains($value): bool

检查给定值是否存在于集合中

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem', 'ipsum', 'dolor']);
$collecion->contains('dolor'); // true

map

public function map(callable $callback): self

对集合中的所有元素应用回调函数

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem', 'ipsum', 'dolor']);
var_dump($collection->map(function($key, $value) {
    return [$key => strtoupper($value)];
}));

/*
object(Astronphp\Collection\Collection)[4]
  protected 'content' => 
    array (size=3)
      0 => string 'LOREM' (length=5)
      1 => string 'IPSUM' (length=5)
      2 => string 'DOLOR' (length=5)
  protected 'length' => int 3
*/

filter

public function filter(callable $callback): self

使用回调函数过滤集合

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9]);
var_dump($collection->filter(function($key, $value) {
    return $value > 5;
}));

/*
object(Astronphp\Collection\Collection)[4]
  protected 'content' => 
    array (size=4)
      5 => int 6
      6 => int 7
      7 => int 8
      8 => int 9
  protected 'length' => int 4
*/

reduce

public function reduce(callable $callback): self

将集合缩减为一个单一值

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$result     = $collection->reduce(function($a, $b) {
    return $a + $b;
});

var_dump($result); // int 15

join

public function join(string $glue)

将元素连接成一个字符串

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
var_dump($collection->join('-')); // string '1-2-3-4-5'

random

public function random(int $num = 1)

从集合中获取随机元素

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
$collection->random(); // 3

shuffle

public function shuffle(): self

打乱集合中的元素顺序

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
var_dump($collection->shuffle());

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=5)
      0 => int 3
      1 => int 1
      2 => int 5
      3 => int 2
      4 => int 4
  protected 'length' => int 5
*/

flip

public function flip(): self

反转集合中键和值之间的关系

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem', 'ipsum', 'dolor']);
var_dump($collection->flip());

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=3)
      'lorem' => int 0
      'ipsum' => int 1
      'dolor' => int 2
  protected 'length' => int 3
*/

keys

public function keys(): self

返回只包含前一个集合键的新集合

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem' => 'ipsum', 'dolor' => 'amet']);
var_dump($collection->keys());

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=2)
      0 => string 'lorem' (length=5)
      1 => string 'dolor' (length=5)
  protected 'length' => int 2
*/

values

public function values(): self

返回只包含前一个集合值的新集合

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem' => 'ipsum', 'dolor', 'amet']);
var_dump($collection->values());

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=2)
      0 => string 'ipsum' (length=5)
      1 => string 'amet' (length=4)
  protected 'length' => int 2
*/

column

public function column($key, $index = null)

从集合中获取列数据

use Astronphp\Collection\Collection;

$collection = new Collection([
    [
        'lorem' => 'ipsum',
        'dolor' => 'amet',
    ],
    [
        'lorem' => 'dolor',
        'dolor' => 'consectetur',
    ],
]);

var_dump($collection->column('lorem'));

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=2)
      0 => string 'ipsum' (length=5)
      1 => string 'dolor' (length=5)
  protected 'length' => int 2
*/

chunk

public function chunk(int $size, bool $preserve_keys = false): self

将集合分成相等的部分

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9]);
var_dump($collection->chunk(3));

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=3)
      0 => 
        array (size=3)
          0 => int 1
          1 => int 2
          2 => int 3
      1 => 
        array (size=3)
          0 => int 4
          1 => int 5
          2 => int 6
      2 => 
        array (size=3)
          0 => int 7
          1 => int 8
          2 => int 9
  protected 'length' => int 3
*/

unique

public function unique(int $flags = SORT_STRING): self

删除重复项

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 1, 2, 3, 4, 5, 2, 3, 4]);
var_dump($collection->unique());

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      6 => int 4
      7 => int 5
  protected 'length' => int 5
*/

coalesce

public function coalesce()

返回第一个非空值

use Astronphp\Collection\Collection;

$collection = new Collection([null, null, null, 'lorem', null, null]);
var_dump($collection->coalesce()); // string 'lorem'

merge

public function merge();

合并集合的所有维度

use Astronphp\Collection\Collection;

$collection = new Collection([
    ['lorem' => 'ipsum'],
    ['dolor' => 'sit'],
    ['amet'  => 'consectetur'],
]);

var_dump($collection->merge());

/*
object(Astronphp\Collection\Collection)[4]
  protected 'content' => 
    array (size=3)
      'lorem' => string 'ipsum' (length=5)
      'dolor' => string 'sit' (length=3)
      'amet' => string 'consectetur' (length=11)
  protected 'length' => int 3
*/

reverse

public function reverse($preserve_keys = null): self

反转集合

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
var_dump($collection->reverse());

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=5)
      0 => int 5
      1 => int 4
      2 => int 3
      3 => int 2
      4 => int 1
  protected 'length' => int 5
*/

search

public function search($value, bool $strict = null)

返回请求值的键

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem' => 'ipsum', 'dolor' => 'amet']);
var_dump($collection->search('ipsum')); // 'lorem'

lower

public function lower(): self

递归地将集合中所有键的case转换为小写

use Astronphp\Collection\Collection;

$collection = new Collection(['Lorem' => 'Ipsum', 'Dolor' => 'Amet']);
var_dump($collection->upper());

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=2)
      'LOREM' => string 'Ipsum' (length=5)
      'DOLOR' => string 'Amet' (length=4)
  protected 'length' => int 2
*/

upper

public function upper(): self

递归地将集合中所有键的case转换为大写

use Astronphp\Collection\Collection;

$collection = new Collection(['Lorem' => 'Ipsum', 'Dolor' => 'Amet']);
var_dump($collection->lower());

/*
object(Astronphp\Collection\Collection)[3]
  protected 'content' => 
    array (size=2)
      'lorem' => string 'Ipsum' (length=5)
      'dolor' => string 'Amet' (length=4)
  protected 'length' => int 2
*/

toArray

public function toArray()

获取集合的内部数组

use Astronphp\Collection\Collection;

$collection = new Collection([1, 2, 3, 4, 5]);
var_dump($collection->toArray());

/*
array (size=5)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
*/

toJson

public function toJson()

将集合内容以JSON字符串形式返回

use Astronphp\Collection\Collection;

$collection = new Collection(['lorem' => 'ipsum', 'dolor' => 'amet']);
var_dump($collection->toJson()); // string '{"lorem":"ipsum","dolor":"amet"}'

sort

public function sort()

对集合的值进行排序

use Astronphp\Collection\Collection;

$collection = new Collection([3, 4, 8, 7, 1, 5]);
$collection->sort(); //[1,3,4,5,7,8]

rsort

public function rsort()

以逆序对集合的值进行排序

use Astronphp\Collection\Collection;

$collection = new Collection([3, 4, 8, 7, 1, 5]);
$collection->rsort(); //[8,7,5,4,3,1]

asort

public function asort()

对集合的值进行排序,同时保持关联性

use Astronphp\Collection\Collection;

$collection = new Collection([
    'lorem' => 'ipsum',
    'dolor' => 'amet',
    'sit' => 'consectetur'
]);
$collection->asort(); //["dolor" => "amet","sit" => "consectetur","lorem" => "ipsum"]

arsort

public function arsort()

按逆序对集合中的值进行排序,保持关联关系

use Astronphp\Collection\Collection;

$collection = new Collection([
    'lorem' => 'ipsum',
    'dolor' => 'amet',
    'sit' => 'consectetur'
]);
$collection->arsort(); // ["lorem" => "ipsum","sit" => "consectetur","dolor" => "amet"]

ksort

public function ksort()

按键对集合中的值进行排序

use Astronphp\Collection\Collection;

$collection = new Collection([
    'lorem' => 'ipsum',
    'dolor' => 'amet',
    'sit' => 'consectetur'
]);
$collection->ksort(); //["dolor" => "amet","lorem" => "ipsum","sit" => "consectetur"]

krsort

public function krsort()

按键对集合中的值进行逆序排序

use Astronphp\Collection\Collection;

$collection = new Collection([
    'lorem' => 'ipsum',
    'dolor' => 'amet',
    'sit' => 'consectetur'
]);
$collection->krsort(); //["sit" => "consectetur","lorem" => "ipsum","dolor" => "amet"]

union

public function union()

对所有集合中的集合执行并集操作

use Astronphp\Collection\Collection;

$collection = new Collection([
    [1, 2, 3],
    [3, 4, 5],
]);

$collection->union(); // [1, 2, 3, 4, 5]

diff

public function diff()

对所有集合中的集合执行差集操作

use Astronphp\Collection\Collection;

$collection = new Collection([
   [1, 2, 3],
   [3, 4, 5],
]);

$collection->diff(); // [1, 2]

$collection = new Collection([
   [3, 4, 5],
   [1, 2, 3],
]);

outer

public function outer()

执行集合之间的完全差集

use Astronphp\Collection\Collection;

$collection = new Collection([
   [1, 2, 3],
   [3, 4, 5],
]);

$collection->outer(); // [[1, 2], [4, 5]]

intersect

public function intersect()

对所有集合中的集合执行交集操作

use Astronphp\Collection\Collection;

$collection = new Collection([
   [1, 2, 3, 4],
   [3, 4, 5, 6],
]);

$collection->intersect(); // [3, 4]

cartesian

public function cartesian()

对所有集合中的集合执行笛卡尔积

use Astronphp\Collection\Collection;

$collection = new Collection([
   [1, 2, 3],
   [3, 4, 5],
]);

$collection->cartesian(); // [[1,3], [1,4], [1,5], [2,3], [2,4], [2,5], [3,3], [3,4], [3,5]]

isCollection

public static function isCollection(): bool
use Astronphp\Collection\Collection;

Collection::isCollection(new Collection()); // true

Collection::isCollection(10); // false

combine

public function combine(): self
use Astronphp\Collection\Collection;

$array = ['lorem', 'ipsum', 'dolor'];

$collection = new Collection([1, 2, 3]);

var_dump(Collection::combine($array, $collection));

/*
object(Astronphp\Collection\Collection)[2]
  protected 'content' => 
    array (size=3)
      'lorem' => int 1
      'ipsum' => int 2
      'dolor' => int 3
  protected 'length' => int 3
*/

range

public static function range($start, $end, $step = 1): self
use Astronphp\Collection\Collection;

Collection::range($start = 10, $end = 20, $step = 2); // [10, 12, 14, 16, 18, 20] 

Collection::range($start = 'A', $end = 'F'); // ["A", "B", "C", "D", "E", "F"]