Laravel 集合从每个函数中检索变量结果

Laravel collection retrieve variable result from each function

我从数据库中检索了一个 laravel 集合,我想根据三个计算更新其中的某些值。但在我进行计算之前,我首先检查所有相关的集合项是否不为空。我可以检查它们是否为空,但由于某种原因无法检索具有控制器功能范围的错误变量来告诉用户尚未设置变量。

$error_arr = [];
$calculation = FertilApp::calculation($product, $farm, $agent);
$calculation->each(function ($item, $key) {
    if ($item->ha === null) {
        $error_arr[] = 'Prices has been updated';
        $error_arr[] = 'But no calculation has been done, please update following block:' . $item->block;
        return false;
     }
});

变量 $error_arr returns 是一个空数组,即使我知道 ha 键是 null。 另一种方法是使用正常的 foreach() 循环。我已经试过了,它有效,但我真的很想知道为什么它不起作用。

有人能帮我解释一下为什么这个集合 each() 方法拒绝我的变量访问集合方法之外的值吗?

编辑:如果我尝试将我的变量作为参数传递,我会收到以下错误消息 Cannot use a scalar value as an array

Laravel版本:5.6.39

尝试 global 语句:

$calculation->each(function ($item, $key) {
   global $error_arr;

$error_arr 在您的代码中为空,因为它不存在于您的 each 方法的回调 function 范围内。与其他语言不同——比如 JavaScript——函数外部的变量在函数内部默认是不可访问的。有关详细信息,请参阅 PHP's documentation on variable scope