Laravel 必知必会的 Collection

简介: Laravel 必知必会的 Collection

集合collection和数组array的区别


查看源码


Laravel中的数组,源代码位置Illuminate\Support\Arr.php;

Laravel中的集合,源代码位置Illuminate\Support\Collection.php;


集合和数组的联系


  1. 集合是对数组的再次封装,以对象的形式呈现;
  2. 提供了很多方法功能(这些方法内部大多采用了回调函数),比数组形式的操作要灵活很多;
  3. 我理解集合就是用面向对象的形式操作元素和以数组形式操作元素的区别:如果以对象操作,是可以链式操作的;如果按照数组操作,则会产生很多中间临时变量或者语句,代码冗长,不好理解,随着时间的推移难以维护;


常用命令


创建集合


collect([1, 2, 3]);


返回该集合所代表的底层数组:


$collection->all();


返回集合中所有项目的平均值:


collect([1, 1, 2, 4])->avg()
$collection->average();


将集合拆成多个给定大小的较小集合:


看到这里有写go语言的感觉了


collect([1, 2, 3, 4, 5])->chunk(2);
结果是:[[1,2], [3,4], [5]]


将多个数组组成的集合折成单一数组集合:


collect([[1],  [4,  5]])->collapse(); // [1, 4, 5]


将一个集合的值作为键,再将另一个集合作为值合并成一个集合


collect(['name', 'age'])->combine(['George', 29]);
结果:
Illuminate\Support\Collection^ {#32
  #items: array:2 [
    "name" => "George"
    "age" => 29
  ]
}


将给定的 数组 或集合值追加到集合的末尾


collect(['PHP'])->concat(['Laravel']); // ['PHP', 'Laravel']


用来判断该集合是否含有指定的项目:


collect(['name' => 'Desk'])->contains('Desk'); // true
collect(['name' => 'Desk'])->contains('name',  'Desk'); // true


返回该集合内的项目总数:


这个和数组一样


$collection->count();


交叉连接指定数组或集合的值,返回所有可能排列的笛卡尔积


在collection集合中的使用如下:


collect([1, 2])->crossJoin(['a', 'b']);
结果:[[1, 'a'],[1, 'b'],[2, 'a'],[2, 'b']]


延伸一下:笛卡尔积是什么?


笛卡尔乘积是指在数学中,两个[集合]XY的笛卡尔积(Cartesian product),又称[直积],表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能[有序对]的其中一个成员。


假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。


dd($collection) 的另一个写法


collect(['John Doe', 'Jane Doe'])->dd();


延伸一下:dd()函数的使用


这里重点提一下,我非常喜欢使用dd()打印结果,dd函数的源码如下


if (!function_exists('dd')) {
    function dd(...$vars)
    {
        foreach ($vars as $v) {
            VarDumper::dump($v);
        }
        exit(1);
    }
}


如果我们想打印结果且中断程序执行,dd()函数是一个非常好的选择。

如果我们想打印结果但是不想中断程序执行可以用 dump():


collect(['John Doe', 'Jane Doe'])->dump();


返回原集合中存在而指定集合中不存在的值


collect([1,  2,  3])->diff([2, 4]); 
结果:[1, 3]


返回集合中 与指定集合键值对 不一致的数据


这个就非常好用了


collect(['color' => 'orange', 'remain' =>  6])->diffAssoc(['color' => 'yellow', 'remain' => 6, 'used' => 6]);  
结果是:['color' => 'orange']


返回原集合中存在,而指定集合中不存在键,所对应的键 / 值对


collect(['one' => 10, 'two' => 20])->diffKeys(['two' => 2, 'four' => 4]); 
结果: ['one' => 10]


遍历集合中的项目,并将之传入给定的回调函数:


$collection = $collection->each(function ($item, $key) {});


验证集合中的每一个元素是否通过指定的条件测试


collect([1,  2])->every(function  ($value,  $key)  { return $value > 1; }); 
结果:false


返回集合中排除指定键的所有项目:


$collection->except(['xxx', 'yyy']);


相关文章
|
7月前
|
存储 关系型数据库 MySQL
lodash库——封装好的collection集合函数
lodash库——封装好的collection集合函数
113 0
|
2月前
|
存储 Java 编译器
Collection-ArrayList源码解析
Collection-ArrayList源码解析
18 0
|
4月前
|
测试技术 API 数据处理
|
4月前
|
SQL 关系型数据库 PHP
深入理解 Laravel 的 ORM:Eloquent
【8月更文挑战第31天】
82 0
|
SQL IDE PHP
Laravel Eloquent 模型 使用技巧
Laravel Eloquent 模型使用技巧
145 0
|
存储 关系型数据库 MySQL
lodash库_封装好的collection集合函数
lodash库_封装好的collection集合函数
146 0
|
安全 API 开发工具
yii2.0的yii\authclient\Collection是干什么的?底层原理是什么?
yii2.0的yii\authclient\Collection是干什么的?底层原理是什么?
138 0
|
SQL PHP 数据库
Laravel 集合使用技巧
集合具有更高阶的可以链式调用的方法,例如 groupBy() , map() 等
142 0
|
PHP 数据库
你可能不知道的 Laravel Eloquent 操作
你可能不知道的 Laravel Eloquent 操作
108 0
|
Python
Python:orator/backpack内置数据操作类Collection
Python:orator/backpack内置数据操作类Collection
125 0