【问题标题】:convert foreach into while loop将 foreach 转换为 while 循环
【发布时间】:2011-06-07 06:07:03
【问题描述】:

大家好,我需要将 foreach 循环转换为 while 循环。 因为当值被迭代时,foreach 循环确实离开了块。我需要 while 循环来继续循环。

我需要迭代数组的项目,但不是在 foreach 循环中。

foreach($values as $event) {
        if($startDate >= $event['start'] && $startDate <= $event['end']  ) {
            echo '<tr><td style="background:red;">Tijd: ' . strftime("== %H:%M ==", $startDate) . '<br/></td><td>'.$startDate.'</td></tr>';
        }
        else {
            echo '<tr><td style="background:green;">Tijd: ' . strftime("== %H:%M ==", $startDate) . '<br/></td><td>'.$startDate.'</td></tr>';
        }       
    }

我最后一次在灾难中发帖。

【问题讨论】:

  • 不清楚你的意思是“当值被迭代时,foreach 循环确实离开了块”。 foreach 循环遍历每个元素一次。如果要迭代多次,则将 foreach 循环放入 for 循环中!
  • ^-- 就像 Oli 说的那样......如果在到达终点后必须“继续循环”,我们将通过哪些数据循环?

标签: php loops


【解决方案1】:

如果你只是想遍历数组,应该这样做:

$array_length = count($values);
$iteration    = 0;

while($iteration < $array_length){
    $event = $values[$iteration];
    ...
    $iteration++;
}

这个功能很像 for() 或 foreach() 循环,如果你只想在满足特定条件时退出循环,你可以这样做:

$active = true;
$iteration = 0;

while($active){
    $event = $values[$iteration];
    ...
    if(some_condition){ $active = false; }
    $iteration++;
}

注意:如果迭代器的增长大于或等于 values 数组的大小,你应该输入一些代码来重置迭代器或将 $active 设置为 false,否则你会遇到麻烦

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2017-04-26
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多