【问题标题】:array_walk_recursive, function using variable outside in PHP [duplicate]array_walk_recursive,在 PHP 中使用外部变量的函数 [重复]
【发布时间】:2012-08-27 15:45:03
【问题描述】:
   $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 += $total; 行出现错误,说变量未定义 - 我相信这是因为我在函数内部?但是我怎么能以任何方式绕过/解决这个问题,所以它确实会添加到变量中?

【问题讨论】:

  • 我发现您不太可能需要递归方法。如果根本需要任何特殊的迭代,则更有可能只需要嵌套循环。如果子数组具有一致的深度,则使用递归是不必要的开销,array_walk_recursive() 将不必要地访问每个叶节点。这个老问题真的会从样本输入中受益。此外,in_array() 是另一个不必要的开销。

标签: php


【解决方案1】:

使用use 关键字:

$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;

传递引用 (&) 以更改闭包外的变量。

【讨论】:

  • 错误消失但 $total_materials_cost 为 0 且不添加
  • @Karem:对不起,错过了。请查看我的更新答案。
猜你喜欢
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多