- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
可能不是 Eloquent 集合特有的问题,但在使用它们时它让我印象深刻。假设我们有一个 $collection
对象,它是 Illuminate\Support\Collection
的一个实例。
现在,如果我们想要迭代它,使用带闭包的 each()
与常规 foreach
的优缺点是什么。有吗?
foreach ($collection as $item) {
// Some code
}
对比
$collection->each(function ($item) {
// Some code
});
最佳答案
foreach
语句应该用作循环遍历集合并对其执行某种逻辑的一种方式。如果其中的内容影响程序中的其他内容,则使用此循环。
.each
方法使用array_map
循环遍历集合中的每个对象并对每个对象执行闭包。然后返回结果数组。这是关键!如果您想以某种方式更改集合,则应使用 .each
。也许它是一系列汽车,而您想将模型设为大写或小写。您只需将闭包传递给 .each
方法,该方法获取对象并在每个 Car 对象的模型上调用 strtoupper()
。然后它返回包含所做更改的集合。
故事的主旨是:使用.each
方法以某种方式改变数组中的每一项;使用 foreach
循环来使用每个对象来影响程序的其他部分(使用一些逻辑语句)。
正如下面 Eloquent 地(看到我在那里做了什么?)所述,上面的答案略有偏差。使用 array_map
的 .each
方法实际上从未使用过 array_map
调用的输出。因此,array_map
创建的新数组不会保存在 Collection
中。要更改它,最好使用 .map
方法,该方法也存在于 Collection
对象上。
使用 foreach
语句遍历它们中的每一个更有意义,因为除非您确保使用 use<,否则您将无法访问 Closure 之外的变量
声明,这对我来说似乎很尴尬。
原来写上面答案时的实现可以是found here .
.each
在 Laravel 5.1 中他们在下面谈论的新的 .each
不再使用 array_map
。它只是遍历集合中的每个项目并调用传入的 $callback
,将项目及其在数组中的键传递给它。在功能上,它似乎工作相同。我相信在阅读代码时使用 foreach
循环会更有意义。但是,我看到了使用 .each
的好处,因为如果您喜欢的话,它允许您将方法链接在一起。如果您的业务逻辑要求您能够这样做,它还允许您从回调中返回 false 以提前离开循环。
有关新实现的更多信息,请查看 the source code .
关于php - Eloquent 合集 : each vs foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592836/
我以前使用过像 Netbeans 和 eclipse 这样的 IDE。 我在 friend 的电脑上下载了“Visual Studio Express 2013 for windows desktop
我正在尝试弄清楚如何在 GBA 大小的 EZ Flash 3 合 1 卡中对 PSRAM 进行编程。基本上重复 GBA Exploader 和其他程序所做的事情。 如果我选择一个 block 并对其进
Filter1=re.findall(r'',PageSource) Filter2=re.findall(r'',PageSource) Filter3=re.findall(r'(.*?).*?'
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是一名优秀的程序员,十分优秀!