【问题标题】:PHP - callback once array_walk has completedPHP - 一旦 array_walk 完成回调
【发布时间】:2014-09-18 08:43:20
【问题描述】:

我正在尝试使用array_walk 为数组中的每个元素运行一个函数并尝试捕获,以便我可以判断是否有任何元素没有成功运行该函数。

一旦所有元素都运行完该函数,我需要用一个完整的回调来响应。

在我下面的代码中,complete json_ecnode 每次都在运行,而不是在最后运行。我究竟做错了什么?这也是最有效的方法吗?

$products = array('shirt','skirt','jumper','lingerie','makeup','top','trousers','coats');

$i = 0;
function createProducts(&$item, $key){
    try {
        // try something
    }
    catch(Exception $e) {
        // error
    }
    $i++;
    if($i > count($products)) { json_encode('complete'); }
}

array_walk($products, 'createProducts');

【问题讨论】:

  • 如果你激活错误报告,你会看到你的问题:变量范围。阅读stackoverflow.com/a/16959577/476。但是你在这里尝试做的事情从前到后似乎非常奇怪。

标签: php arrays try-catch


【解决方案1】:

你可以这样做:

$products = array('shirt','skirt','jumper','lingerie','makeup','top','trousers','coats');
$count = count($products);
$i = 0;
array_walk($products, function(&$item, $key) use (&$i, $count){ // using anonymous
    try {
        // try something
        echo "<strong>$item</strong><br/>";
    }
    catch(Exception $e) {
        // error
    }

    $i++;
    if($i == $count) {

        echo 'completed at ' . $i;
        // execute something
    }
});

【讨论】:

    【解决方案2】:

    $i 将始终为 1,因为每次执行函数时都会获得该变量的新实例。

    【讨论】:

      【解决方案3】:

      除了 Ghost 的回答之外,这里还有一种匿名调用的方法,但是您仍然在之前定义了该函数,并且在使用它时不正确。 (如果您打算以后再使用它会更好)

      $products = array('shirt','skirt','jumper','lingerie','makeup','top','trousers','coats');
      
      $i = 0;
      $callback = function (&$item, $key) use ($i) {
          try {
              // try something
          }
          catch(Exception $e) {
              // error
          }
          $i++;
          if($i > count($products)) { json_encode('complete'); }
      };
      
      array_walk($products, $callback);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        相关资源
        最近更新 更多