0
function months(){
    for($i=1;$i<=12;$i++)
    if($i<10)   {
    echo '<option value="'."0".$i.'">'."0".$i.'</option>';
    }
    else{
    echo '<option value="'.$i.'">'.$i.'</option>';
    }
}

This populates a dropdown with 01, 02, 03... instead of 1, 2, 3...

So, I concatenated 0 and $i if $i<10 and it works, but maybe it is possible by formatting $i as two digits, or some similar, shorter method ?

qadenza
  • 9,025
  • 18
  • 73
  • 126

5 Answers5

5

You don't want the value itself to be two digits, only the display.

echo '<option value="' . $i . '">' . sprintf('%02d', $i) . '</option>';
Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
3

you can use str_pad

$str = str_pad($i, 2, "0", STR_PAD_LEFT);
DevZer0
  • 13,433
  • 7
  • 27
  • 51
2
function months() {
  for ($i = 1; $i <= 12; $i ++) {
    $number = sprintf("%02d", $i);
    echo '<option value="' . $number . '">' . $number . '</option>';
  }
}
aaaaaa123456789
  • 5,541
  • 1
  • 20
  • 33
2

Use str_pad like this -

   function months(){
        for($i=1;$i<=12;$i++) {
         echo '<option    value="'.str_pad($i,2,"0",STR_PAD_LEFT).'">"'.str_pad($i,2,"0",STR_PAD_LEFT).'</option>';    
        }    

    }
MD SHAHIDUL ISLAM
  • 14,325
  • 6
  • 82
  • 89
2

By adding another variable you could shorten it to:

function months(){
    for($i=1;$i<=12;$i++)
         $mo = ($i<10) ? "0".$i : $i;
         echo '<option value="'.$i.'">'.$mo.'</option>';
    }
}