laravel的Collections类以及方法使用及介绍(翻译一)

本文详细介绍了Laravel的Collections类,包括如何创建、扩展和使用各种方法进行数据处理,如mapping、reducing、chunk、merge、filter等,同时也探讨了其在Eloquent ORM中的特殊行为。通过示例代码,展示了Collections如何简化数组操作,并提供便利的数据转换功能。
摘要由CSDN通过智能技术生成

1.简介
Illuminate\Support\Collection类为数组数据转化提供了顺畅和方便的压缩方式。例如,下面的代码,我们用一个数组创建一个collect实例对每一个元素运行strtoupper方法并随后移除所有的空元素。

$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
   
    return strtoupper($name);
})->reject(function ($name) {
   
    return empty($name);
});

你可以看到,Collection类允许你使用关联的方法mapping和reducing去表现出你想需要的数组信息。一般collection不可改变,意味着每一个Collection方法返回一个整体的Collection实例对象。

2.创建一个collection

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

Eloquent(object-relational mapper (ORM))查询结果总以Collection实例返回

3.扩展Collection

Collections可以进行“宏指令编辑”,运行时可以加入你想要的方法。macro方法调用时会接收一个闭包函数。如果这个函数成为collection类中的方法时,闭包函数可以通过$this和collection方法交互联系。例如下面的代码:

use Illuminate\Support\Collection;
use Illuminate\Support\Str;

Collection::macro('toUpper', function () {
   
    return $this->map(function ($value) {
   
        return Str::upper($value);
    });
});

$collection = collect(['first', 'second']);

$upper = $collection->toUpper();

// ['FIRST', 'SECOND']

Macro Arguments(Macro 参数)

你可以定义macros时接受加入的参数:

use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Str;

Collection::macro('toLocale', function ($locale) {
   
    return $this->map(function ($value) use ($locale) {
   
        return Lang::get($value, [], $locale);
    });
});

$collection = collect(['first', 'second']);

$translated = $collection->toLocale('es');

4.可用方法
Collection所有的这些方法可以非常顺畅流利地操作数组数据。 此外,几乎每一个方法都会返回一个Collection实例对象。如果有必要允许你拷贝collection,保护好原始数据:

all()

collect([1, 2, 3])->all();
//返回在collection形式下数组元素

average()平均数
别名:avg()

$average = collect([
    ['foo' => 10],
    ['foo' => 10],
    ['foo' => 20],
    ['foo' => 40]
])->avg('foo');
// 20 返回指定key的平均数
$average = collect([1, 1, 2, 4])->avg();
// 2 所有数的平均数

chunk()

$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->chunk(4);
$chunks->all();
// [[1, 2, 3, 4], [5, 6, 7]]

chunkWhile()

$collection = collect(str_split('AABBCCCD'));

$chunks = $collec
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值