PHP - 计数器为每个循环不更新

时间:2014-10-30 17:18:26

标签: php loops foreach counter

我循环遍历一系列产品,每次迭代我调用一个函数theFunction

$products = array (
    //...
    //...
);
$count = count($products);

$i = 0;
foreach ($products as $product) {
    theFunction($id, $name, $i);
    $i++;
    if($i == $count){
        // complete
    }
}

然后在这个函数中我有一些带有计数器的其他循环,我需要区分如果它是循环中的第一个会发生什么。为此,我使用$counter,如果为1则处理task 2,否则应始终处理task 3

function theFunction( $id, $name, $key ){

    $design = Mage::getModel('catalog/category')->load($id);
    $collection = $design->getProductCollection();
    foreach ($collection as $p) {

        // do task 1...

        // if success/exists then proceed...
        if(file_exists('new_name.jpg')) {

            $product = Mage::getModel('catalog/product')->load($p->getId());
            $new_array = array( $key => $name.'.jpg' );

            $counter = 1;
            foreach($new_array as $label => $img){
                if($counter === 1 ){
                    // do task 2
                }else{
                    // do task 3
                }

                $counter++;
            }

            $product->save();

        }

    }

}

此时计数器始终设置为1且永不增加,因此它始终在每次迭代时处理任务2

2 个答案:

答案 0 :(得分:1)

$new_array = array( $key => $name.'.jpg' )只会有一个项目,因此您永远不会到达task 3,因为foreach ($new_array as ...)只会执行一次。

我不知道您想要包含的内容$new_array,因此我无法就如何解决问题提出建议。您的脚本完全按照您的要求执行,只是您误解了foreach输入。

答案 1 :(得分:0)

$ counter是函数中的局部变量,仅在函数内创建,并在函数返回时被销毁。

我建议将计数器作为参数传递,然后返回它,允许你保留值

例如在你的函数定义中:

function theFunction( $id, $name, $key, $counterValue ){
    //stuff
    return $counterValue;
}

然后在调用函数时

$counter = theFunction($id, $name, $i, $counter);

别忘了设置$ counter = 0;在您的主要(不在函数中)foreach循环之前