2010-09-04 98 views
2

我有一个小问题PHP:for循环和生日日期

生日的存储为MySQL数据库中的日期。

日期为00-00-00

,现在当我做出选择的选项,我用一个for循环做的:

<?php 
$month_names = array("januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december"); 
for ($i=1; $i<=12; $i++) { 
    echo "<option "; 
    if ($i == $month) { 
     echo "selected=\"selected\" "; 
    } 
    echo "value=\"$i\">", $month_names[$i-1], "</option>\n"; 
} 
?> 

这工作,但给我的1,2,3 ,4,5,6,7,8,9,10,11,12作为值。

我需要像这样01,02,03,04,05,06,07,08,09,10,11,12

我怎样才能做到这一点?

回答

3

你需要把这样的条件:

for ($i=1; $i<=12; $i++) { 
    echo "<option "; 
    if ($i == $month) { 
     echo "selected=\"selected\" "; 
    } 

    if ($i < 10) { 
     echo "value=\"0$i\">", $month_names[$i-1], "</option>\n"; 
    } 
    else{ 
     echo "value=\"$i\">", $month_names[$i-1], "</option>\n"; 
    } 
} 
+0

我会说,像这样的条件是有点多。我真的很喜欢Tim的解决方案,并且无法完成SimpleCoder的解决方案。 – 2ndkauboy 2010-09-04 21:24:36

+0

@ Kau-Boy:同意这是我写作时的想法:) – Sarfraz 2010-09-04 21:25:42

0

一个简单的方法是用“0”前面加上字符串值,如果是小于10

3

str_pad()就是你”重新过后。

http://www.php.net/str_pad

而不是打印$i的,你需要使用

echo str_pad($i, 2, "0", STR_PAD_LEFT); 

这将垫在左手尺寸零字符串,直到它长两个字符。

4

用以下替换第7行:

printf("value=\"%02d\">%s</option>\n", $i, $month_names[$i-1]); 
1

无需使用字符串格式化功能:

变化

echo "value=\"$i\">", $month_names[$i-1], "</option>\n"; 

echo "value=\"$i\">", ($month_names[$i-1] < 10 ? $month_names[$i-1] : "0" . $month_names[$i-1]), "</option>\n";