我有一个名为$ selection的数组,其中包含从15:00到18:00的15分钟间隔的升序时间值。
例如:$ 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 :(得分: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>'; }
如果之前无法对数组进行排序,只需在循环时存储到2D数组并在之后打印。
答案 1 :(得分: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>'; }