不要再傻傻的toArray()了

简介: 上面将集合转成数组的函数是我之前做项目时最常用的命令,我之前没有深入了解collection,Eloquent返回的数据我都会再使用toArray()转成数组,现在想想真是可笑

举个小栗子:


$collection->toArray()


上面将集合转成数组的函数是我之前做项目时最常用的命令,我之前没有深入了解collection,Eloquent返回的数据我都会再使用toArray()转成数组,现在想想真是可笑。


collection明明已经给我们做了这么多好用的封装。我竟然又转回数组进行操作了。

如果你也有这种情况,那么这篇文章一定适合你看。


Laravel 集合是 Laravel 框架中一个十分有用的工具。Laravel 集合就像是在 PHP 中的数组,集合的目的在于让我们轻松的对数组进行处理。Laravel查找出来的数据,一般都是集合形式。


测试相关命令


以给定的回调函数筛选集合,只留下那些通过判断测试的项目:


$filtered = $collection->filter(function ($item) {
    return $item > 2;
});


返回集合中,第一个通过给定测试的元素:


$res = collect([1, 2, 3, 4, 5])->first(function ($key, $value) {
    var_dump('key:' . $key);
    var_dump('value:' . $value);
    return $key > 2;
});
dd($res);


输出结果是:


string(5) "key:1"
string(7) "value:0"
string(5) "key:2"
string(7) "value:1"
string(5) "key:3"
string(7) "value:2"
3


返回集合中,最后一个通过给定测试的元素:


$collection->last();


转换命令


将集合转换成纯 PHP 数组:


这是我之前最常用的命令,我封装了基础函数,把集合都转成数组进行使用了,太搞笑了~ 学习技术还是要深入哇。


$collection->toArray();


将集合转换成 JSON:


$collection->toJson();


将多维集合转为一维集合:


$flattened = $collection->flatten();


实例代码:


$collection = collect([1,2,3,'num'=>[4,5,6]]);
var_dump($collection);
$collection = $collection->flatten();
var_dump($collection);
dd('-----');


运行结果:


object(Illuminate\Support\Collection)#2541 (1) {
  ["items":protected]=>
  array(4) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(3)
    ["num"]=>
    array(3) {
      [0]=>
      int(4)
      [1]=>
      int(5)
      [2]=>
      int(6)
    }
  }
}
object(Illuminate\Support\Collection)#32 (1) {
  ["items":protected]=>
  array(6) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(3)
    [3]=>
    int(4)
    [4]=>
    int(5)
    [5]=>
    int(6)
  }
}
"-----"


将集合中的键和对应的数值进行互换:


$flipped = $collection->flip();


代码实例:


$collection = collect(['one'=>1]);
print $collection;
print PHP_EOL;
$collection = $collection->flip();
print $collection;
print PHP_EOL;
exit();


运行结果:{"one":1} {"1":"one"}


进阶命令


通过键名从集合中移除掉一个项目:


$collection->forget('name');


返回含有可以用来在给定页码显示项目的新集合:


在CMS和需要展示页码的项目中比较实用


$chunk = $collection->forPage(2, 3);


返回给定键的项目。如果该键不存在,则返回 null:


很基础 不用过多介绍


$value = $collection->get('name');


根据给定的键替集合内的项目分组:


有些场景下我们可以在sql查询时直接进行分组,当sql分组查询不方便时,我们可以先拿到数据,再通过集合的groupBy()进行分组


$grouped = $collection->groupBy('account_id');


相关文章
|
9天前
|
Java 编译器 UED
Arrays.asList() 数组转换成集合酿成的线上事故,差点要滚蛋了!
本文介绍了Java开发中使用`Arrays.asList()`方法将数组转换为集合时的一个常见陷阱。该方法返回的List是固定长度的,不支持添加或删除操作,直接使用可能导致线上故障。文章通过一次实际开发中的事故案例,分析了问题的原因,并提供了使用`java.util.ArrayList`进行封装的解决方案,以避免此类错误的发生。希望读者能从中吸取教训,提高代码的健壮性。
|
7月前
|
Web App开发 前端开发 架构师
快10年的老前端了,我还分不清 slice 和 splice,这到底是谁的锅
快10年的老前端了,我还分不清 slice 和 splice,这到底是谁的锅
|
编译器 Go
昨天那个在for循环里append元素的同事,今天还在么?
昨天那个在for循环里append元素的同事,今天还在么?
56 1
|
存储 安全 算法
《我要进大厂》- Java集合夺命连环13问,你能坚持到第几问?(Map | Collections)
《我要进大厂》- Java集合夺命连环13问,你能坚持到第几问?(Map | Collections)
《我要进大厂》- Java集合夺命连环13问,你能坚持到第几问?(Map | Collections)
|
JavaScript 前端开发 搜索推荐
不好意思!🍎我真的只会用 Array.prototype.sort() 写✍排序!
不好意思!🍎我真的只会用 Array.prototype.sort() 写✍排序!
76 0
|
存储 安全 算法
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
|
索引
一点通透:map与forEach的用法
一点通透:map与forEach的用法
257 0
UPC 朋友 + AtCoder ABC155 C Poll (map遍历 && 二维map)
UPC 朋友 + AtCoder ABC155 C Poll (map遍历 && 二维map)
86 0
|
Web App开发 JavaScript 前端开发
面试官:有了 for 循环,为什么还要 forEach ?
面试官:有了 for 循环,为什么还要 forEach ?
279 0
面试官:有了 for 循环,为什么还要 forEach ?