0

ここで少し助けた後。入ってくるデータの配列を受け取り、データを時間順に並べ替えるコードを作成しようとしています (これは簡単に実行できます)。

テーブルには 22 ブロックの時間があるので、各行を 22 に等しくする必要があります (配列内の各項目にはブロック値があります) これを行うことができます

私が求めているのは、そのデータの配列を取得し、データの一部が午前 9 時から 3 スロットである場合、3 スロットが必要であると言うことです (実行できます)。ただし、午前 9 時がその日の最初の項目である場合は、ループが必要です。最初に、配列内の最初のスロットが見つかるまで 1 つのブロック スロットを作成します。次に、次のスロット セットが 14:00 の場合は、その間のスロットを埋めます。

すなわち代わりに

test1, 2slots, 09:00, room1
test1, 1slot, 12:00, room1 
test1, 2slots, 13:00, room1
test1, 4slots, 15:00, room1
10
11
12
13
...
22

をお願いします。

1
2
3
4
test1, 2slots, 09:00, room1, 6
7
8
9
10
test1, 1slot, 12:00, room1, 11
12
test1, 2slots, 13:00, room1, 14
15
16
test1, 4slots, 15:00, room1, 20
21
22

my function is currently (これは最初のブロックを返します)

if(is_array($meetrooms)){
$i = 0;
foreach($meetrooms as $valuer){ 
    $b = $valuer['num_blocks'];
    $i += $b;
    ?>
    <span><?php echo $valuer['title'] . " " . $valuer['num_blocks'] . " " . $valuer['room_name']  . " " . $i . " " . br() ;?></span>
<?php       
}
if($i != 22){ 
    while($i <= 22){ ?>
        <span><?php echo $i . br() ;?></span>
<?php
        $i++;
    }
}
}

私の配列は縮小されていますが、次のように構造化されています

[0] => Array
    (
        [mr_id] => 3
        [title] => test1 meeting
        [description] => Some meeting going on here
        [staff_id] => 2454
        [room_name] => room1
        [start_date] => 2012-04-20 00:43:58
        [start_time] => 08:00:00
        [end_date] => 2012-04-20 00:43:58
        [end_time] => 09:00:00
        [num_blocks] => 2
    )

どんな助けでも素晴らしいでしょう!!! 他に必要なものはお尋ねください

編集

私は今そこに90%いる

唯一の問題は、 while ループの外側の値を while ループに連結していることです。. . ???

if(is_array($meetingrooms))
{
$time = date('H:i', strtotime("07:00"));
$i = 1;
foreach($meetingrooms as $valuer)
{ 
    while ($time < $valuer['start_time'])
    { ?>
        <span><?php echo "....." . $time . " " . $i . ".....";?></span>
    <?php
        $prev = date('H:i', strtotime($time));
        $next = strtotime('+30mins', strtotime($prev));
        $time = date('H:i', $next);
        $i++;
    }
    $nummins = $valuer['num_blocks'] * 30 - 30;
    $next = strtotime('+' . $nummins . 'mins', strtotime($time));
    $time = date('H:i', $next);
    $b = $valuer['num_blocks'];
    echo  "td" . $valuer['num_blocks'];
    $i = $i + 1;
}
$timetofinish = date('H:i', strtotime("18:00"));
if ($time < $timetofinish)
{
    while ($time < $timetofinish)
    {
        echo "<span>......$time..." . $i  . "</span>";
        $prev = date('H:i', strtotime($time));
        $next = strtotime('+30mins', strtotime($prev));
        $time = date('H:i', $next); 
        $i++;
    }
}
}

それが今返すのは

.....07:00 1..... .....07:30 2..... .....08:00 3..... td2    .....09:00 5..... .....09:30 6..... .....10:00 7..... .....10:30 8..... td1     .....11:00 10..... .....11:30 11..... .....12:00 12..... td4    .....14:00 14..... .....14:30 15..... .....15:00 16..... td1......15:30...18......16:00...19......16:30...20......17:00...21......17:30...22
4

2 に答える 2

0

ある種の教室予約タイムテーブルを作成しようとしていますか?

date_default_timezone_set ( 'GMT' );
$meetingrooms = array ( /* ... YOUR DATA ... */ );

define ('MAX_SLOTS', 22);
define ('START_TIME', strtotime('05:00'));
define ('END_TIME', strtotime('22:00'));
$rooms = array ( "room1", "room2" );
$reserved = array();
foreach ($rooms as $room) {
    $reserved[$room] = array();
    for($t = START_TIME; $t <= END_TIME; $t = strtotime('+30mins', $t)) {
        $reserved[$room][$t] = "FREE";
    }
}

foreach ($meetingrooms as $valuer) {
   $t = strtotime($valuer['start_time']);
   while ( $t < strtotime($valuer['end_time'])) {
       $reserved[$valuer['room_name']][$t] = $valuer;
       $t += strtotime('+30mins', $t);
   }      
}

foreach ($reserved as $roomname=>$reservations) {
    echo "{$roomname}: ";
    foreach ($reservations as $t=>$valuer) {
        echo date("H:i", $t).( ($valuer === "FREE") ? "...." : $valuer['title'])." | ";
    }
    echo "\n";
}

これで、要件に合わせて出力を変更 (HTML/XML などを追加) できます。

于 2012-04-20T12:02:26.243 に答える