PHP - array_walk完成后回调

时间:2014-09-18 08:43:20

标签: php arrays try-catch

我正在尝试使用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');

3 个答案:

答案 0 :(得分: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
    }
});

答案 1 :(得分:0)

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

答案 2 :(得分:0)

除了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);