1

ここに画像の説明を入力してください

for / foreachループで上記の結果を達成するにはどうすればよいですか[写真2]?iveはグーグルで回りましたが、私が欲しいものの答えを見つけることができませんでした...

$name = array('D1','D2','D3' );

foreach ( $name as $k=> $v ) {
  $openTime3 = strtotime('10:00');
  $closeTime3 =  strtotime('15:00');

  echo '<div class="col"> <span class="header">'.$v.'</span>';

  while ( $openTime3 < $closeTime3 ) {
     if ( ( date('Hi', $openTime3) > '1030'  && date('Hi', $openTime3) < '1130' ) && $k == 1) {
        echo '<span class="body "><a href="#" class="unconfirmed">B</a></span>';
        break; /* ???? */
        // try to use continue or break, and it didnt work i above result.
     } else {
        echo '<span class="body"><a href="#" class="available">AV</a></span>';
     }

     $openTime3 = strtotime('+15 minutes', $openTime3);
  }

  echo '</div>';
}

cssコード:

.col { text-align: center; width: auto; float: left; }
.col > span { display: block; }
.col > span > a {height: 26px;line-height: 26px;display: block; padding: 0 10px; }
.col > span > .available { background: #D6F2F4; }

上記のコードは常に以下の結果を返します[写真1]:

ここに画像の説明を入力してください

4

2 に答える 2

1

背景と同じ境界線の色でCSSに未確認のスタイルを追加しました。フラグを使用してBを切り替えます

<style>
.col { text-align: center; width: auto; float: left; }
.col > span { display: block; }
.col > span > a {height: 26px;line-height: 26px;display: block; padding: 0 10px; }
.col > span > .available { background: #D6F2F4;border-style:solid;
border-width:1px;}
.col > span > .unconfirmed { background: #ffff99;border-style:solid;
border-width:1px;border-color: #ffff99;}

</style>
<?php
$name = array('D1','D2','D3' );
$flag=0;//Set flag off
foreach ( $name as $k=> $v ) {
  $openTime3 = strtotime('10:00');
  $closeTime3 =  strtotime('15:00');

  echo '<div class="col"> <span class="header">'.$v.'</span>';

  while ( $openTime3 < $closeTime3 ) {

     if ( ( date('Hi', $openTime3) > '1030'  && date('Hi', $openTime3) < '1130' ) && $k == 1) {

        if($flag==0){
        echo '<span class="body "><a href="#" class="unconfirmed"></a></span>';//Hide B
        $flag=1;Toggle flag on
        }else{
        echo '<span class="body "><a href="#" class="unconfirmed">B</a></span>';Show B
        $flag=0;Toggle flag off
        }

     } else {
        echo '<span class="body"><a href="#" class="available">AV</a></span>';
     }
     //$flag=1;
     $openTime3 = strtotime('+15 minutes', $openTime3);
  }
  echo '</div>';
}
?>

ここに画像の説明を入力してください

于 2012-11-26T19:47:32.003 に答える
1

ブレークを使用すると、10:45 で処理が停止し、11 ~ 11:30 の間は何も出力されません。

D Time Result
0 14:45 AV
1 10:00 AV
1 10:15 AV
1 10:30 AV
1 10:45 B  <= Breaks Here
2 10:00 AV

break の代わりに continue を使用すると、continue を発行する前に時間が調整されていることを確認する必要があります。そうしないと、ループを終了しないという致命的なエラーが発生します。

while ( $openTime3 < $closeTime3 ) {
 if ( ( date('Hi', $openTime3) > '1030'  && date('Hi', $openTime3) < '1130' ) && $k == 1) {
    echo '<span class="body "><a href="#" class="unconfirmed">B</a></span>';
    $openTime3 = strtotime('+15 minutes', $openTime3);
    continue;
 } else {
    echo '<span class="body"><a href="#" class="available">AV</a></span>';
 }

   $openTime3 = strtotime('+15 minutes', $openTime3);
}

ただし、これは、高さが増加する 1 つの B ブロックではなく、3 つの別個の B ブロックになるため、必要な結果は得られません。

1 1000 AV
1 1015 AV
1 1030 AV
1 1045 B
1 1100 B
1 1115 B
1 1130 AV
1 1145 AV
etc..

b ブロックに単一のスパン要素が必要な場合は、必要な数を計算し、必要な数に応じて css で高さを調整する必要があります

于 2012-11-26T19:36:09.583 に答える