2011-06-03 76 views
11

這應該是容易的,但我有麻煩......PHP循環

在PHP我怎麼能回聲出一個選擇下拉框,8個月前默認爲當前月份,有選擇(即使在去年)。

例如,本月它將默認爲6月,並在11月結束。

回答

23
$months = array(); 
for ($i = 0; $i < 8; $i++) { 
    $timestamp = mktime(0, 0, 0, date('n') - $i, 1); 
    $months[date('n', $timestamp)] = date('F', $timestamp); 
} 

另類的 「定製」 的月份名稱:

$months = array(1 => 'Jan.', 2 => 'Feb.', 3 => 'Mar.', 4 => 'Apr.', 5 => 'May', 6 => 'Jun.', 7 => 'Jul.', 8 => 'Aug.', 9 => 'Sep.', 10 => 'Oct.', 11 => 'Nov.', 12 => 'Dec.'); 
$transposed = array_slice($months, date('n'), 12, true) + array_slice($months, 0, date('n'), true); 
$last8 = array_reverse(array_slice($transposed, -8, 12, true), true); 

輸出這樣個月的下拉數組是簡單:

<select name="month"> 
    <?php 
     foreach ($months as $num => $name) { 
      printf('<option value="%u">%s</option>', $num, $name); 
     } 
    ?> 
</select> 
+0

謝謝噸欺騙。它們是我不會想到這樣做的很好的例子(我的嘗試並不那麼簡潔)。當我使用你的第一個答案時,我喜歡第二個的清晰輸出。 – kimion09 2011-06-03 03:17:37

6
$months = array(
    'January', 
    'February', 
    'March', 
    'April', 
    'May', 
    'June', 
    'July ', 
    'August', 
    'September', 
    'October', 
    'November', 
    'December', 
); 

$current = date('F'); 
$start = array_search($current, $months); 

$toshow = array(); 
$total = 0; 
for($i = $start; $total < 8; $i--) 
{ 
    if($i == 0) 
    { 
     $i = 12; 
    } 

    $toshow[] = $months[$i]; 
    $total++; 
} 

var_dump($toshow); 

把那一個鏡頭,只需將$ toshow轉儲到您的HTML。

1

這絕對是基於deceze的答案只有幾個月的向後排序,當月選擇

$curr_month = date('F',mktime(0, 0, 0, date('n'))); 
    $months = array(); 

for ($i = 1; $i <= 8; $i++) { 
$months[] = date('F', mktime(0, 0, 0, date('n') - $i, 1)); 
} 
    $months = array_reverse($months, true); 

echo "<select>\n"; 
foreach($months as $key =>$value){ 
     echo "<option value='$value'>$value</option>\n"; 
            } 

echo "<option value='$curr_month' selected='selected'>$curr_month</option> 
    </select>"; 
+0

爲什麼將它們向後排序,看起來很奇怪 – 2011-06-03 00:30:41

+0

不,看起來是正確的 - 1月 - 2月等,而不是2月 - 1月等等。原始數組的月份數從當前月份向後數8個月。 – 2011-06-03 01:53:45

2

下面的一些功能......在頁面加載時將選擇當前日期,月份,年份+包括你的需要 - 8個月

<form method="POST" action=""> 
<p><select size="1" name="day"> 
<?php formDay(); ?> 
</select>- 
<select size="1" name="month"> 
<?php formMonth(); ?> 
</select>- 
<select size="1" name="year"> 
<?php formYear(); ?> 
</select> <input type="submit" value="Submit"></p> 
</form> 

<?php 
//functions to loop day,month,year 
function formDay(){ 
    for($i=1; $i<=31; $i++){ 
     $selected = ($i==date('n'))? ' selected' :''; 
     echo '<option'.$selected.' value="'.$i.'">'.$i.'</option>'."\n"; 
    } 
} 
//with the -8/+8 month, meaning june is center month 
function formMonth(){ 
    $month = strtotime(date('Y').'-'.date('m').'-'.date('j').' - 8 months'); 
    $end = strtotime(date('Y').'-'.date('m').'-'.date('j').' + 8 months'); 
    while($month < $end){ 
     $selected = (date('F', $month)==date('F'))? ' selected' :''; 
     echo '<option'.$selected.' value="'.date('F', $month).'">'.date('F', $month).'</option>'."\n"; 
     $month = strtotime("+1 month", $month); 
    } 
} 

function formYear(){ 
    for($i=1980; $i<=date('Y'); $i++){ 
     $selected = ($i==date('Y'))? ' selected' :''; 
     echo '<option'.$selected.' value="'.$i.'">'.$i.'</option>'."\n"; 
    } 
} 
?> 
13

如果您需要打印像選擇框的選項,請嘗試使用此:

for($i=1;$i<13;$i++) 
print("<option>".date('F',strtotime('01.'.$i.'.2001'))."</option>");