2012-10-29 58 views
0

我有一個名爲$ selection的數組,其中包含從15:00到18:00的上升時間值,間隔爲15分鐘。如何在下拉列表中圍繞php數組值包含optgroup標籤

例如:$ selection = array(09:00,09:15,09:30,09:45,10:00,10:15,10:30);

有些區間可能會丟失,因爲這個數組是從一些先前的代碼中產生的,這些代碼決定了哪些時間可以從谷歌日曆(其中包括)。 09:00並不總是開始時間,有時整個上午都可以預訂。

我正在使用此數組創建一個下拉列表。

foreach($selection as $slot) { 
    if ($slot == $selection[0]) { 
    print '<option value="'.$slot.'" selected="selected">'.date('H:i', strtotime($slot)).'</option>'; 
    } else { 
    print '<option value="'.$slot.'">'.date('H:i', strtotime($slot)).'</option>'; 
    } // end else 
} 

問題

我想補充

<optgroup label="Morning"> .. </optgroup> 

<optgroup label="Afternoon"> .. </optgroup> 

不知道如何做到這一點。我得出結論,我需要一個while循環。也許甚至在運行foreach循環之前向數組中添加額外的信息......不確定!

希望得到任何幫助

回答

0

對於有序陣列

$interval = ''; 
$prev_interval = ''; 

foreach($selection as $slot) 
{ 
    // Check if selected option 

    $sel = ($slot == $selection[0]) ? ' selected = "selected" ' : ''; 

    // Set optgroup interval; 
    // for HH:MM we can use basic string alphabet comaparsion 

    if ($slot > '22:00') 
    { 
     $interval = 'Night'; 
    } 
    else if ($slot > '18:00') 
    { 
     $interval = 'Evening'; 
    } 
    ... 

    // check if interval has changed 

    if ($prev_interval != $interval) 
    { 
     // check if previous intrval was set 

     if ($prev_interval!='') { echo "</optgroup>" }; 

     printf('<optgroup label="%s">',$interval); 
    } 

    printf('<option value="%s"%s>%s</option>',$slot,$sel,date('H:i', strtotime($slot))) ; 

    $prev_interval = $interval; 
} 

// last close element 

if ($interval!='') { echo '</optgroup>'; } 

如果陣列之前不能排序,簡單地存儲二維數組循環和打印後一段時間。

+0

嘿,隊友,你的代碼一開始不工作。然而,這是一個很好的起點,併爲我解決了這個問題。非常感謝 – anastymous

+0

Argh。選擇條件中缺少撇號。 Sry爲此。 –

0
$interval = ''; 
$prev_interval = ''; 

foreach($selection as $slot) { 
// Check if selected option 

if ($slot == $selection[0]) { 

    $sel = "selected = \"selected\""; 
} 

else { $sel = '';} 

//$sel = ($slot == $selection[0]) ? ' selected = "selected" : ''; 

// Set optgroup interval; 
// for HH:MM we can use basic string alphabet comaparsion 

if (date('H:i', strtotime($slot)) > '18:30') { 
    $interval = 'Evening'; 
} 

else if (date('H:i', strtotime($slot)) > '15:30') { 
    $interval = 'Late Afternoon'; 
} 

else if (date('H:i', strtotime($slot)) > '12:00') { 
    $interval = 'Early Afternoon'; 
} 

else if (date('H:i', strtotime($slot)) > '10:30') { 
    $interval = 'Late Morning'; 
} 

else if (date('H:i', strtotime($slot)) > '09:00') { 
    $interval = 'Early Morning'; 
} 

// check if interval has changed 
if ($prev_interval != $interval) { 
    // check if previous intrval was set 

    if ($prev_interval!='') { 
    echo "</optgroup>"; 
    } 

    printf('<optgroup label="%s">',$interval); 
} 

printf('<option value="%s"%s>%s</option>',$slot,$sel,date('H:i', strtotime($slot))) ; 

$prev_interval = $interval; 
} 

// last close element 

if ($interval!='') { echo '</optgroup>'; } 
+0

這是爲我工作。 – anastymous

相關問題