用do..while,继续?

时间:2011-05-10 15:37:12

标签: php loops

<?php
// initial value

$week = 50;
$year = 2001;
$store = array();
do
  {
  $week++;
  $result = "$week/$year";
  array_push($store,$result);
  if($week == 53){
    $week = 0;
    $year++;//increment year by 1
    }
    continue;
  }
// End of Loop
while ($result !== "2/2002");

?>

print_r($store);

结果希望返回

array("51/2001", "52/2001", "01/2002", "02/2002");

使用do..while时继续使用是什么问题?

2 个答案:

答案 0 :(得分:5)

  • 你对array_push的论证是错误的。阅读您使用的功能的手册条目。打开服务器上的警告; running这在键盘中立刻向我展示了问题。 [编辑:您现在已经在问题中悄悄地解决了这个问题。]
  • 您还有一个拼写错误:$i而不是$week
  • 最后,您针对“02/2002”进行测试,但是对于那个月,字符串将是“2/2002”。

固定代码(live demo):

<?php
// initial value

$week = 50;
$year = 2001;
$store = array();
do
  {
  $week++;
  $result = "$week/$year";
  array_push($store, $result);
  if($week == 53){
    $week = 0;
    $year++;//increment year by 1
    }
    continue;
  }
// End of Loop
while ($result !== "2/2002");
?>

一般情况下,我建议反对这样的循环。正如您所发现的,您的代码非常脆弱,因为您只测试了一个非常具体的值,如果该值不正确,则会得到无限循环。

相反,请考虑单独和数字地比较$week$year

while ($week < 2 && $year <= 2002)

下次请在您的问题中添加您 看到的输出,以及您想要查看的输出。它可以节省我们重现问题的时间。

答案 1 :(得分:0)

我可能无法正确理解这一点......如果你能解释一下那会有所帮助。

尝试将循环转换为函数,然后转动while(..)以检查函数变量。

然后只需调用它4次即可填充阵列。