php - Eloquent 合集 : each vs foreach

标签 php laravel eloquent laravel-collection

可能不是 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 循环来使用每个对象来影响程序的其他部分(使用一些逻辑语句)。

更新(2015 年 6 月 7 日)

正如下面 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/

相关文章:

php - 如何在 Netbeans 中创建源文件位于本地网络中的新 PHP 项目?

php - 使用 PHP 脚本更改 Linux 主机名

php - 如何获取文档根目录上方一个文件夹的文件?

Laravel Eloquent 缓存分页聚合计数结果

mysql - 将 SQL 查询转换为 Eloquent

php - 如何使用 php 以正确的编码重写此 xml 文件?

laravel - PHPUnit:动态加载不同的环境文件

php - 如何将上传文件存储在 laravel 8 的公用文件夹中

mysql - 如何获取搜索结果中的所有列值(包括分页)

laravel - 添加whereBetween子句不会返回预期结果集