0

15分間隔で09:00から18:00までの時間の昇順値を含む$selectionという配列があります。

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

この配列は、Googleカレンダーから利用できる時間を決定する以前のコードから生成されているため、一部の間隔が欠落している可能性があります(とりわけ)。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ループを実行する前に、配列に追加情報を追加することさえあります。

助けていただければ幸いです

4

2 に答える 2

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>'; } 

配列を前に並べ替えることができない場合は、whileループで2D配列に格納し、後で印刷します。

于 2012-10-29T21:45:18.123 に答える
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>'; } 
于 2012-10-30T09:17:42.883 に答える