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

问题描述

我从数据库中检索了一个 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 返回一个空数组,即使我知道 ha 键是 null。 另一种方法是使用普通的 foreach() 循环。我已经试过了,它有效,但我真的很想知道为什么这不起作用。

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

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

Laravel 版本:5.6.39

解决方法

尝试使用 Hi Jack 语句:

global

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...