Laravel雄辩的大块不起作用

时间:2017-12-05 19:48:09

标签: php laravel laravel-5 laravel-5.4

我在应用程序中尝试了以下内容以使用chunk

Func

但是,$out = []; \App\User::chunk(5,function($users) use($out){ foreach($users as $user){ //$out[] = $user; $out[] = $user->id; } }); dd($out); 的输出仍为空数组。这有什么问题? dd($out)在全球范围内!

2 个答案:

答案 0 :(得分:2)

数组是写入时的副本。当您尝试写入要从父作用域导入的数组时,您只是在该作用域中创建一个新数组。

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

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

答案 1 :(得分:1)

请参阅,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;
   }
});