数组\u walk\u递归函数,在PHP中使用外部变量

数组\u walk\u递归函数,在PHP中使用外部变量,php,Php,对于上述代码,我在第$total\u materials\u cost+=$total行得到错误,表示变量未定义-我相信这是因为我在函数中?但是我怎样才能绕过/解决这个问题,使它添加到变量中呢?使用使用关键字: $total_materials_cost = 0; array_walk_recursive($materials, function($item, $key) { if (in_array($key, array('id'))) {

对于上述代码,我在第
$total\u materials\u cost+=$total行得到错误,表示变量未定义-我相信这是因为我在函数中?但是我怎样才能绕过/解决这个问题,使它添加到变量中呢?

使用
使用
关键字:

   $total_materials_cost = 0;
   array_walk_recursive($materials, function($item, $key) {
        if (in_array($key, array('id'))) {

                    (....)

                    $total = $material_price * $material['amount'];

                    $total_materials_cost += $total;
                }
            }
        }
    });
echo $total_materials_cost;

传递一个引用(
&
)来更改闭包外部的变量。

错误消失,但$total_materials_cost为0,并且没有add@Karem:对不起,错过了。请看我更新的答案。我发现你不太可能需要递归方法。如果需要任何特殊的迭代,则更可能只需要嵌套循环。如果子阵列具有一致的深度,则使用递归是不必要的开销,
array\u walk\u recursive()
将不必要地访问每个叶节点。这个老问题真的会从样本输入中受益。另外,数组()中的
是另一个不必要的开销。
$total_materials_cost = 0;
array_walk_recursive($materials, function($item, $key) use(&$total_materials_cost) {
  if (in_array($key, array('id'))) {
    // (....)
    $total = $material_price * $material['amount'];
    $total_materials_cost += $total;
  }
});
echo $total_materials_cost;