我在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)
在全球范围内!
答案 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;
}
});