1

在此处输入图像描述

我如何使用 for / foreach 循环实现上述结果 [​​图 2]?我用谷歌搜索但找不到我想要的答案......

$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

如果您使用中断,它将在 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

使用 continue 而不是 break,您需要确保在发出 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);
}

但这也不会产生您想要的结果,因为它将是 3 个单独的 B 块,而不是 1 个增加高度的 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 回答
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 回答