7.集合、方法、函数

2019-12-10  本文已影响0人  darren911

Illuminate\Support\Collection 类

1.提供了一个更具可读性和更便于处理数组数据的封装。

创建集合

如上所述, collect 辅助函数会为指定的数组返回一个新的 Illuminate\Support\Collection 实例。因此,我们可以这样轻松的创建一个集合:

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

Tip:通常,Eloquent 查询的结果返回的内容都是 Collection 实例。

扩展集合

集合都是「可宏扩展」(macroable) 的,它允许你在执行时将其它方法添加到 Collection 类。例如,通过下面的代码在 Collection 类中添加一个 toUpper 方法:

use Illuminate\Support\Str;
Collection::macro('toUpper', function () {
    return $this->map(function ($value) {
        return Str::upper($value);
    });
});
$collection = collect(['first', 'second']);
$upper = $collection->toUpper();

方法列表

$collection = collect([1, 2, 2, 2, 3]);
$counted = $collection->countBy();
$counted->all();
// [1 => 1, 2 => 3, 3 => 1]
//但是,你也可以传递一个回调函数给 countBy 来计算自定义的值出现的次数:
$collection = collect(['alice@gmail.com', 'bob@yahoo.com', 'carlos@gmail.com']);
$counted = $collection->countBy(function ($email) {
    return substr(strrchr($email, "@"), 1);
});
$counted->all();
// ['gmail.com' => 2, 'yahoo.com' => 1]

懒集合

注意:在进一步学习 Laravel 的懒集合之前,我们先花点时间熟悉一下 PHP generators

为了补充已经很强大的 Collection 类, LazyCollection 类利用了 PHP 的 generators 来允许你在保持低内存使用率的同时使用非常大的数据集。

例如,假设你的应用需要处理一个千兆字节的日志文件,同时利用 Laravel 的集合方法来解析这个日志文件。与其一次将整个文件读入内存,不如使用懒集合在给定时间仅将文件的一小部分保留在内存中:

use Illuminate\Support\LazyCollection;
LazyCollection::make(function () {
    $handle = fopen('log.txt', 'r');

    while (($line = fgets($handle)) !== false) {
        yield $line;
    }
});

函数

上一篇下一篇

猜你喜欢

热点阅读