什么是Laravel系列?PHP数组和Laravel集合之间有什么区别?
集合似乎与数组非常相似。例如,通过get()
方法检索的结果是数据的集合。但是当我们想将其用作数组时,我们必须使用toArray()方法。为什么啊?
把一个集合想象成一个类固醇阵列。它是一个与数组工作相同的对象-也就是说,您可以使用$collection['item']
获取项目,并使用$collection['foo']='bar'
对其进行设置-但它还为更高级别的函数提供了额外的方法,以简化常见操作。这些方法通常是使用foreach
和手动操作数组的替代方法。Adam Wathan提供了一些很好的实例,说明了使用集合而不是数组可能带来的好处。网上其他地方也有很好的介绍。
集合是处理数据数组的方便包装器。集合有数组的所有便利,也有自己的助手。
Illumb\Support\Collection类为处理数据数组提供了一个流畅、方便的包装器。如您所见,Collection类允许您链接其方法,以执行底层数组的流畅映射和缩减。通常,集合是不可变的,这意味着每个集合方法都返回一个全新的集合实例。
https://laravel.com/docs/5.3/collections
它基本上是PHP数组函数的API包装器。但是它有更多有利于阵列处理的特性。
1.避免使用牙套
在这种情况下,至少使用5个大括号:
shuffle(shuffle(arsort(array_unique(array_merge($array1,$array2)))));
这是地狱,如果数组中有超过10个大括号,最终可能会丢失大括号。但是,如果使用集合,则可以将其替换为:
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.收集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 collection的许多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 collection在每个新版本中都增加了许多非常有用的数组API。设计了许多有用的助手来处理数组的键值类型,因此对于开发应用程序非常有用。比如:keyBy()
,where()
,isEmpty()
,isNotEmpty()
等等。
此外,集合是可宏的,这意味着您可以扩展集合API,使集合更适合您的项目。
总而言之,Laravel集合是我开发的强大阵列处理助手。
Linux 也是众多操作系统之一,要想知道 Linux 是什么,首先得说一说什么是操作系统。 计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频等)。计算机由硬件和软件组成: 硬件是计算机赖以工作的实体,包括显示器、键盘、鼠标、硬盘、CPU、主板等; 软件会按照用户的要求协调整台计算机的工作,比如 Windows、Linux、Mac OS、
问题内容: 在sql关系中,父级是什么,子级是什么? 就我而言,我有一个零件(说螺丝)和产品材料。出于争论的考虑,一种产品材料(例如钢)只能属于一个零件(但不能属于现实世界)。所以这是1:n。该零件的pk将在ProductMaterial表中以fk表示。 在这种情况下,哪个是父母,哪个是孩子? 问题答案: 您可以通过以下方式解释数据库中的1:n关系:子代始终是该模型,该模型保存着外键,因为它表明了
系统投屏,指的是安卓手机和Win10电脑系统自带的基于Miracast技术的无线投屏方式。 轻推智能投屏盒子支持Miracast投屏方式,但为了不影响投屏盒子的主要功能,默认不开启该投屏方式,当需要使用时,可在投屏主界面中点击“设置”开启“本次允许系统投屏”,如图: 当允许本次系统投屏后,可以在安卓手机的设置-多屏互动/投射大屏/屏幕共享,开始投屏;或者在Win10系统的电脑上找到“投影”功能,开
ChatGPT是由总部位于旧金山的公司 OpenAI构建。该公司负责创建GPT-3和DALL-E2 等软件
问题内容: 最近,我看到了带有“ webkit”标签的问题。这些问题通常是与CSS,jQuery,布局,跨浏览器兼容性问题等有关的基于Web的问题。 那么,这是什么“ Webkit”,它与CSS有什么关系?我还注意到各种网站的源代码中有很多属性。这两个有关系吗? 更新资料 因此,从到目前为止的答案来看… WebKit是Safari / Chrome的HTML / CSS Web浏览器呈现引擎。是否
数据库系统 (Database System,DBS)由硬件和软件共同构成。硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发的访问技术等。 数据库系统是指在计算机系统中引入数据库后的系统。完整的数据库系统结构关系如图所示: 由图可知,一个完整的数据库系统一般由数据库、数据库管理系统、应用开发工具、