tree em
tree em

Reputation: 21751

using do..while ,continue?

<?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);

result want return will be

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

What is my problems by using while using do..while ,continue?

Upvotes: 1

Views: 2660

Answers (2)

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385274

  • Your arguments to array_push are the wrong way around. Read the manual entry for functions you use. Turn on warnings on your server; running this in codepad showed me the problem immediately. [Edit: You have now quietly fixed that in your question.]
  • You also have a typo: $i instead of $week.
  • Finally, you test against "02/2002", but for that month the string will be "2/2002".

Fixed code (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");
?>

In general, I'd recommend against loops like this. As you've discovered, your code is very fragile because you're testing for just one very specific value, and if that value is not precisely correct you get an infinite loop.

Instead, consider comparing $week and $year separately and numerically:

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

Next time please include in your question the output that you are seeing, as well as the output that you want to see. It'll save us time in reproducing your problem.

Upvotes: 5

Chris
Chris

Reputation: 4083

I may not be understanding this correctly... If you could explain a bit more that'd help.

Try turning the loop into a function, and turn the while(..) to check the functions variable.

then just call it 4 times to fill your array.

Upvotes: 0

Related Questions