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