Laravel eloquent 块不工作

Laravel eloquent chunk does not work

我在 application to use chunk 中尝试了以下方法:

$out = [];
\App\User::chunk(5,function($users) use($out){
   foreach($users as $user){
       //$out[] = $user;
       $out[] = $user->id;
   }
});
dd($out);

然而,dd($out)的输出仍然是空数组。这里有什么问题? $out 在全局范围内!

请看,PHP 中的 use 不仅仅使外部作用域中的变量在函数内可用(类似于 JS 等中的词法作用域)。它复制那个变量的值(和here's more explanation,由于某种原因在官方文档中仍然缺失)。

use作为在函数内部传递一些值而不实际将其作为形式参数,函数签名的一部分的意思。

最重要的是,您应该传递数组作为参考:

\App\User::chunk(5,function($users) use(&$out){
   foreach($users as $user){
       //$out[] = $user;
       $out[] = $user->id;
   }
});

数组是写入时复制的。当您尝试写入要从父范围导入的数组时,您只是在该范围内创建了一个新数组。

您需要使用对数组的引用。

function ($users) use (&$out) { ... }