for循环在迭代结束后再次继续

时间:2014-08-21 09:58:20

标签: php for-loop

我使用了下面给出的相同逻辑的函数    鉴于以下代码是我使用的相同逻辑的样本,我需要在迭代结束后继续for循环,我在结束时将0分配给变量$ j,这样forloop需要继续,为什么它关闭了进程。

for($i=$j;$i<7;$i++){

echo "<br/>".$i;
if($i == 6){$j=0;continue;}
}

实际输出

1
2
3
4
5
6 

预期输出

1
2
3
4
5
6 
1
2
3
4
5
6 
.....etc

我的原始代码示例

 foreach($Qry_Rst as $key=>$Rst_Val){
   for($j=$ItrDt;$j<7;$j++){
     $ItrDate =  date('Y-m-d', mktime(0, 0, 0, $month, $day + $j, $year));
                if($ItrDate == $Rst_Val['sloat_day']){
                  $TimeTableAry[$loop_itr] = $Rst_Val;
                   break
                 }
   }
}

2 个答案:

答案 0 :(得分:2)

doc says

  

第一个表达式(expr1)在循环开始时无条件地计算(执行)一次。

因此,只需使用$j代替$i来重置循环。就这样(demo

$j = 1;
$current = 0;
for ($i=$j; $i<4; $i++) {
    printf("i: %d, j: %d\n", $i, $j);
    if ($i==3 && $current < 5) {
        $i = -1;
        $j = mt_rand(0,3);
        $current++;
        continue;
    }
}

显示,您实际上需要重置$i = -1;,以便在评估0$i++。{/ p>


但是有了这个,你在循环的每次迭代中都会有if,尽管你只需要一个。基本上你不需要它来进行迭代本身,但只是为了开始下一个,所以这里必须有其他东西。

function doFor($data, $callback) {
    $dataLength = count($data);
    for ($i=0; $i<$dataLength; $i++) {
        call_user_func($callback, $data[$i]);
    }
    return $data;
}

将循环隔离到自己的函数中将允许一行执行所需的callback,允许您的主代码类似于(demo

$data = array(array("foo","bar"),array("hello"),array("world","!"));

function justDump($obj) {
    var_dump($obj);
};

$i = 0;
do {
    $data = doFor($data, 'justDump');
    print "<br>";
    $i++;
} while($i<5);

答案 1 :(得分:0)

你也可以尝试你原来想要的方式(只是略微编辑):

//counter to avoid infinite loop
$counter = 0;
for($i=$i;$i<7;$i++){
    echo "<br/>".$i;
    if($i == 6){
        $i=0; 
        $counter++; 
        continue;
    }
    if($counter == 5){break;}
}

1
2
3
4
5
6
1
2
3
...