什么是Laravel集合?

Ima*_*ghi 4 php laravel

什么是Laravel集合?PHP数组和Laravel集合有什么区别?

似乎集合与数组非常相似。例如,通过该get()方法检索的结果是数据的集合。但是,当我们要将其用作数组时,必须使用toArray()method。为什么?

cao*_*ish 10

它基本上是PHP数组函数的API包装器。但是它具有更多的功能,可以使数组处理受益。

1.避免撑地狱

认为这种情况有5个花括号:

 shuffle(shuffle(arsort(array_unique(array_merge($array1,$array2)))));
Run Code Online (Sandbox Code Playgroud)

这真是太糟糕了,如果数组具有超过10个大括号,那么您最终可能会失去对大括号的跟踪。但是,如果使用Collection,则可以将其替换为:

collect($array1)
     ->merge($array2)
     ->unique()
     ->sort()
     ->shuffle()
     ->shuffle()
Run Code Online (Sandbox Code Playgroud)

这更具可读性,面向对象和流程思想。

2.统一使用API

这是PHP原始API问题,您永远不知道数组应该在参数中的哪个位置。他们只是不一致。例如:

    array_walk ( $array , $callback );
    array_map ( $callback , $array);
    array_merge ( $array1 ,$array2 );// return a new array
    array_push ($array1 ,$value); // not return a new array
Run Code Online (Sandbox Code Playgroud)

Laravel Collect只提供一致的API,使我的生活更轻松。

    collect($array)
         ->each($callback)
         ->map($callback)
         ->merge($array2)
         ->push($value)
Run Code Online (Sandbox Code Playgroud)

3.Collection API处理键值数组更好

Laravel专注于处理数据库中的数据。因此,很多情况都是使用键值数组而不是索引数组。因此,Laravel集合针对原始PHP函数具有许多扩展方法,这些方法使用数组的键进行处理。例如:

 $array=[
        ["id"=>1,"name"=>"Apple"],
        ["id"=>2,"name"=>"Banana"],
        ["id"=>1,"name"=>"Apple"],
        ["id"=>2,"name"=>"Banana"],
    ];

    $result= collect($array)->unique("id");
Run Code Online (Sandbox Code Playgroud)

结果将是:

 Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Apple
        )

    [1] => Array
        (
            [id] => 2
            [name] => Banana
        )

)
Run Code Online (Sandbox Code Playgroud)

4.处理多层阵列

大多数PHP原始数组API仅处理数组的顶层。如果要处理数组的较深层,则代码可能会变得更加复杂。但是Laravel集合的许多API允许您访问数组的深层。

例如:

 $array=[
        ["id"=>1,"product"=>['name'=>"Apple"]],
        ["id"=>2,"product"=>['name'=>"Watermelon"]],
        ["id"=>3,"product"=>['name'=>"Banana"]],

    ];

    $result= collect($array)->sortBy("product.name");
Run Code Online (Sandbox Code Playgroud)

结果将是:

Array
(
    [0] => Array
        (
            [id] => 1
            [product] => Array
                (
                    [name] => Apple
                )

        )

    [2] => Array
        (
            [id] => 3
            [product] => Array
                (
                    [name] => Banana
                )

        )

    [1] => Array
        (
            [id] => 2
            [product] => Array
                (
                    [name] => Watermelon
                )

        )

)
Run Code Online (Sandbox Code Playgroud)

5.原始PHP中缺少更多的数组助手

除上述内容外,Laravel集合在每个新版本中都增加了许多非常有用的数组API。设计了许多有用的Helper来处理数组的Key-Value类型,因此对于开发应用程序非常有用。像: keyBy()where()isEmpty()isNotEmpty()等等。

此外,Collection是可宏化的,这意味着您可以扩展Collection API,使Collection更适合您的项目。

总而言之,Laravel集合是我开发中功能强大的数组处理助手。


Ale*_*nin 6

集合是处理数据数组的方便包装器。集合拥有数组的所有便利,还有一堆自己的助手

Illuminate\Support\Collection 类为处理数据数组提供了流畅、方便的包装器。如您所见,Collection 类允许您链接其方法以执行底层数组的流畅映射和减少。一般来说,集合是不可变的,这意味着每个 Collection 方法都会返回一个全新的 Collection 实例。

https://laravel.com/docs/5.3/collections