不要再傻傻的toArray()了

4,910 阅读2分钟

「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」。

首先说明一下我为什么要整理这篇文章?

举个小栗子:

$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');

欢迎互动

大家有什么好用的命令欢迎在评论区讨论

相关文章推荐

Laravel 必知必会的Collection 基础版

硬核文章推荐

性能优化反思:减少DB查询,合理使用成员变量。

PHP转Go 2021年年中总结

如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

Git使用实战:多人协同开发,紧急修复线上bug的Git操作指南。

性能优化反思:不要在for循环中操作DB

性能优化反思:不要在for循环中操作DB 进阶版

最后

👍🏻:觉得有收获请点个赞鼓励一下!

🌟:收藏文章,方便回看哦!

💬:评论交流,互相进步!