0

人が会議室を予約すると、その予約が会社の従業員の Web 上に表示される会議室予約システムがあります。現在、その日の予約が 1 つある場合、正しくプロットされます。

いくつかの会議室があり、いずれも 8:00 から 17:00 の間でいつでも予約できます。

会議室の予約が 1 つの場合、次のようになります。

ここに画像の説明を入力

しかし、同じ日に別の会議室の予約がある場合は、次のようになります。

ここに画像の説明を入力

グリッドを作成するための for ループは次のようになります。

for($h = 8; $h < 17; $h++) { // hours
    for($m = 0; $m < 4; $m++) { // 15 minutes
        echo '<tr><td>' . $h . ':' . str_pad(($m*15),2,"0") . '</td>'; //plots the timeslot
        foreach($boardrooms as $boardroom) { // array of boardrooms
            foreach($boardroomBookings as $booking) { // array of boardroom bookings
                if(date('H:i',strtotime($h . ':' . str_pad(($m*15),2,"0"))) >= date('H:i',strtotime($booking['BoardroomBooking']['start_time'])) &&
                date('H:i',strtotime($h . ':' . str_pad(($m*15),2,"0"))) < date('H:i',strtotime($booking['BoardroomBooking']['end_time'])) &&
                $boardroom['Boardroom']['name'] == $booking['Boardroom']['name']) {
                    echo '<td rowspan="0" style="background-color:#8cc63f; border-bottom:none">' . $this->Html->link($booking['BoardroomBooking']['name'], array('action' => 'view', $booking['BoardroomBooking']['id'])) . '</td>'; // writes the name into the timeslot
                } else {
                    echo '<td></td>'; // writes an empty block
                }
            }
        }
        echo '</tr>'; // closes the row
    }
}

私は何を間違っていますか?

アップデート

これは骨抜きにされた配列です (使用されているデータのみを表示しています)。

$boardrooms = array(
    (int) 0 => array(
        'Boardroom' => array(
            'name' => 'Big Boardroom (Pretoria)'
        )
    ),
    (int) 1 => array(
        'Boardroom' => array(
            'name' => 'Small Boardroom (Pretoria)'
        )
    ),
    (int) 2 => array(
        'Boardroom' => array(
            'name' => 'Medium Boardroom (No Screen) (Pretoria)'
        )
    ),
    (int) 3 => array(
        'Boardroom' => array(
            'name' => 'Big Boardroom (Floor 3) (Pretoria)'
        )
    ),
    (int) 4 => array(
        'Boardroom' => array(
            'name' => 'Big Boardroom (Durban)'
        )
    ),
    (int) 5 => array(
        'Boardroom' => array(
            'name' => 'Big Boardroom (Cape Town)'
        )
    )
)

$boardroomBookings = array(
    (int) 0 => array(
        'BoardroomBooking' => array(
            'id' => '1206',
            'name' => 'asdfasdf',
            'boardroom_id' => '1',
            'date' => '2013-05-21',
            'start_time' => '08:15:00',
            'end_time' => '10:00:00'
        ),
        'Boardroom' => array(
            'id' => '1',
            'name' => 'Big Boardroom (Pretoria)'
        )
    ),
    (int) 1 => array(
        'BoardroomBooking' => array(
            'id' => '1208',
            'name' => 'Test 2',
            'boardroom_id' => '4',
            'date' => '2013-05-21',
            'start_time' => '09:00:00',
            'end_time' => '12:00:00'
        ),
        'Boardroom' => array(
            'id' => '4',
            'name' => 'Big Boardroom (Floor 3) (Pretoria)'
        )
    )
)
4

1 に答える 1

1

だから私はそれを修正しました。

おそらく $boardroomBookings ループと、予約済みの会議室とループ会議室の比較が原因であると考えたので、微調整を行って機能させました。

for($h = 8; $h < 17; $h++) {
    for($m = 0; $m < 4; $m++) {
        echo '<tr><td>' . $h . ':' . str_pad(($m*15),2,"0") . '</td>';
        foreach($boardrooms as $boardroom) {
            foreach($boardroomBookings as $booking) {
                if(date('H:i',strtotime($h . ':' . str_pad(($m*15),2,"0"))) >= date('H:i',strtotime($booking['BoardroomBooking']['start_time'])) &&
                date('H:i',strtotime($h . ':' . str_pad(($m*15),2,"0"))) < date('H:i',strtotime($booking['BoardroomBooking']['end_time'])) &&
                $boardroom['Boardroom']['name'] == $booking['Boardroom']['name']) {
                    $writerow = true;
                    $rowspan = (strtotime($booking['BoardroomBooking']['end_time']) - strtotime($booking['BoardroomBooking']['start_time']))/900;
                    echo '<td style="background-color:#8cc63f; border-bottom:none">' . $this->Html->link($booking['BoardroomBooking']['name'], array('action' => 'view', $booking['BoardroomBooking']['id'])) . '</td>';
                    break;
                } else {
                    $writerow = false;
                }
            }
            if(!$writerow) {
                echo '<td></td>';
            }
        }
        echo '</tr>';
    }
}
于 2013-05-16T08:00:01.920 に答える