集合操作Collection

引入

use zxf\Tools\Collection;

API

初始化数据

// 示例使用
$data = new Collection([
    ['id' => 1, 'name' => 'Alice', 'age' => 20],
    ['id' => 2, 'name' => 'Bob', 'age' => 21],
    ['id' => 3, 'name' => 'Charlie', 'age' => 19],
    ['id' => 4, 'name' => 'David'],
    ['id' => 5, 'name' => ''],
]);

转换为数组

$data->toArray();

转换为带缩进格式的JSON字符串

$data->toJson();

普通JSON字符串

echo $data;
或者
$data->toString();

统计元素个数

$data->count();

多维度数组遍历

$data = new Collection([
   [
       'a'=>['id' => 1, 'name' => 'Alice'],
       'b'=>['id' => 2, 'name' => 'Bob'],
   ],
   [
       'c'=>['id' => 3, 'name' => 'Charlie'],
       'd'=>['id' => 4, 'name' => 'David'],
   ]
]);
foreach ($data as $item) {
   foreach ($item as $value) {
       var_dump($value->id); // 对象的属性访问
       var_dump($value['name']); // 键值访问
       var_dump($value->toArray()); // 转换为数组
   }
}

访问某个元素

$data['0']->id;
$data['0']['name'];

查找数据

$data->get('0.name');
$data->get('0')->name;
$data->get('0')->toArray();

判断数据是否为空

$data->isEmpty();
$data->isNotEmpty();

where查询

$data->where('id', 3);
$data->where('id','=', 1);
$data->where([
   ['id', '>', 1],
   ['name', '=', 'Bob'],
]);
$data->where('name', function ($value,$index) {
   // 闭包操作每一个name 的值
});

like 查询
$data->where('name', 'like', 'A%');

$data->whereIn('id', [2, 4]);

$data->whereNull('name');
$data->whereNotNull('name');

$data->whereBetween('id', [2, 3]);

获取数组的维度/深度

Collection::getArrayDimension($data);

添加元素

$data->add(['id' => 7, 'name' => 'DSffdf']);
var_dump($data->toArray());

移除指定的元素

$data->remove(['name' => 'Alice'])->toArray();

合并多个数组

$multiDimensionalArray = [
   ['id' => 1, 'name' => 'AliceX'],
   ['id' => 2, 'name' => 'Bob'],
];
var_dump($data->merge($multiDimensionalArray)->toArray());

排序

// 升序排序
var_dump($data->sortBy('id')->toArray());
// 降序排序
var_dump($data->sortBy('id', SORT_DESC)->toArray());
var_dump($data->sortByDesc('id')->toArray());

去重

var_dump($data->unique()->toArray());

遍历

$data->map(function ($value, $key){
   var_dump($value, $key);die;
});
$data->each(function ($value, $key){
   var_dump($value, $key);die;
});

取部分字段

var_dump($data->pluck('name')->toArray());
var_dump($data->pluck('age','name')->toArray());

分块读取

$data->chunk(3, function ($items, $index) {
   var_dump($items->first()->toArray(), $index);
});

返回集合中的一部分元素

var_dump($data->slice(1,1)->toArray());

//返回集合中的第一个元素
var_dump($data->first()->toArray());
//返回集合中的最后一个元素
var_dump($data->last()->toArray());

分组

var_dump($data->groupBy('age')->toArray());

avg

// 求平均值
var_dump($data->avg('age'));

sum

// 求和
var_dump($data->sum('age'));

max

// 求最大值
var_dump($data->max('age'));

min

// 求最小值
var_dump($data->min('age'));

随机打乱

var_dump($data->shuffle()->toArray());

集合求差集

$multiDimensionalArray = [
    ['id' => 1, 'name' => 'Alice', 'age' => 20],
    ['id' => 6, 'name' => 'Bob'],
];
// 集合求差
var_dump($data->diff($multiDimensionalArray)->toArray());

根据指定的比较函数找出两个集合的交集

var_dump($data->intersect($multiDimensionalArray)->toArray());

多个数组或集合合并

var_dump($data->merge($multiDimensionalArray, $data)->toArray());

将集合的元素连接成字符串

var_dump($data->join('-'));

根据指定键或闭包对集合元素进行分组统计

var_dump($data->countBy('age'));

返回集合中所有键的集合

var_dump($data->keys()->toArray());

返回集合中所有值的集合

var_dump($data->values()->toArray());

随机抽取集合中的一个或多个样本

var_dump($data->sample(2)->toArray());

在集合的开始或结束处填充指定数量个指定值

var_dump($data->pad(1, ['id' => 1, 'name' => 'Alicexxxx', 'age' => 20])->toArray());
var_dump($data->pad(1, ['id' => 1, 'name' => 'Alicexxxx', 'age' => 20], 'end')->toArray());