【问题标题】:PHP - counter in for each loop not updating [closed]PHP - 每个循环的计数器不更新[关闭]
【发布时间】:2014-10-30 17:18:25
【问题描述】:

我正在遍历一系列产品,并且对于每次迭代我调用一个函数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

【问题讨论】:

标签: php loops foreach counter


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    我建议将计数器作为参数传入,然后返回,让你保留值

    例如在你的函数定义中:

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

    然后在调用函数时

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多