2010-09-04 49 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";