什么是Laravel系列? PHP数组和Laravel集合之间有什么区别?
看起来集合与数组非常相似。例如,通过get()
方法检索的结果是数据集合。但是当我们想要将它用作数组时,我们必须使用toArray()
方法。为什么呢?
答案 0 :(得分:6)
它基本上是PHP数组函数的API包装器。但它有更多的功能,有利于阵列处理。
<强> 1。避免括号地狱
在5个大括号中考虑这个案例:
shuffle(shuffle(arsort(array_unique(array_merge($array1,$array2)))));
这是地狱,如果拥有超过10个大括号的阵列,你最终可能会失去对大括号的追踪。但是,如果您使用Collection,则可以将其替换为:
collect($array1)
->merge($array2)
->unique()
->sort()
->shuffle()
->shuffle()
这是更具可读性,面向对象和流动思维。
<强> 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
Laravel Collect只提供一致的API,让我的生活更轻松。
collect($array)
->each($callback)
->map($callback)
->merge($array2)
->push($value)
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");
结果将是:
Array
(
[0] => Array
(
[id] => 1
[name] => Apple
)
[1] => Array
(
[id] => 2
[name] => Banana
)
)
<强> 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");
结果将是:
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
)
)
)
<强> 5。原始PHP
中缺少更多数组助手除此之外,Laravel集合在每个新版本中增加了许多非常有用的数组API。许多有用的Helper旨在处理数组的Key-Value类型,因此对于开发应用程序非常有用。例如:keyBy()
,where()
,isEmpty()
,isNotEmpty()
等。
此外,Collection是可宏的,这意味着您可以扩展Collection API,使Collection更适合您的项目。
总而言之,Laravel系列是我开发的强大数组处理助手。
答案 1 :(得分:4)
Collection是处理数据数组的便捷包装器。集合具有数组的所有便利性,也有一堆自己的helpers。
Illuminate \ Support \ Collection类为处理数据数组提供了一个流畅,方便的包装器。如您所见,Collection类允许您链接其方法以执行流畅的映射和减少底层数组。通常,集合是不可变的,这意味着每个Collection方法都返回一个全新的Collection实例。
答案 2 :(得分:1)
将Collection视为类固醇的数组。它是一个与数组相同的对象 - 也就是说,您可以使用$collection['item']
获取项目并使用$collection['foo'] = 'bar'
进行设置 - 但它附带了用于执行常见操作的更高级别函数的其他方法更轻松。这些方法通常是使用foreach
和手动操作数组的替代方法。 Adam Wathan在使用集合而不是数组时可以获得一些好的practical examples好处。在线其他地方也有good introductions。
答案 3 :(得分:0)