从MySQL数据库创建预订概述(表) - 组合数组

时间:2017-08-24 19:54:32

标签: php mysql wordpress twitter-bootstrap multidimensional-array

由于缺乏编程经验,我很绝望。 我正在开发一个小型WordPress插件,一个房间预订系统。

现在我的问题是创建每日概述。 在数据库中,有一个表格,其中所有预订都如下所示:

--------------------------------------------------------------
|id|user_id|     starttime     |     endtime       |room|type|
---+-------+-------------------+-------------------+----+-----
|1 |    101|2017-08-24 11:00:00|2017-08-24 12:30:00|12  | 4  |
|2 | ...

每天的概述/日程/时间表应使用Bootstrap作为HTML表格,如下所示:

Time    Conference Room     Meeting Room     Lobby
07:00       Mr. T   
08:00       Mr. T
09:00                          C.J.P.         Mrs. L.
10:00
11:00
12:00       Mrs. M

所以免费的时间段应该是空列。

为实现这一目标,我开始使用一个函数来创建所有的开始时间:

$times_array = array();
    $timing_interval = get_option('timing');
   for ($hours = get_option('starttime'); $hours < get_option('endtime'); $hours++) {
      for ($m = 0; $m < 60; $m += $timing_interval) {
      $starttime_html = sprintf('%02u:%02u', $hours, $m);
      $times_array[$starttime_html]='';
    }
} 

之后我创建了一个包含已保存预订的数组:

$booking_array = array();
    $statement = $wpdb->get_results( $wpdb->prepare("SELECT {$mpbs_prefix}_bookings.id, user_id, wp_users.user_nicename AS username_nice, starttime, facility_id, roomname, equipment_1, {$mpbs_prefix}_equipment.name AS eq_1_name, equipment_2 FROM {$mpbs_prefix}_bookings, {$mpbs_prefix}_facilities, {$mpbs_prefix}_equipment, wp_users WHERE user_id = wp_users.ID AND equipment_1 = {$mpbs_prefix}_equipment.id AND {$mpbs_prefix}_facilities.id = {$mpbs_prefix}_bookings.facility_id AND starttime >= '2017-08-22 00:00:00'"),ARRAY_A);

    $bookingrow = 0;


foreach($statement as $actualbookings) {

   $starttime_currentday = explode(" ",$statement[$bookingrow]['starttime']);

   $starttime_curr_hm = substr($starttime_currentday[1],0,5);

     $booking_array[$bookingrow] =
       array('starttime_of_booking'=>$starttime_curr_hm, 'facliId'=>$statement[$bookingrow]['facility_id'],'userid'=> $statement[$bookingrow]['username_nice'], 'horse_1_name' => $statement[$bookingrow]['horse_1_name']);
             $bookingrow++;
 }

由于有很多不同类别的房间(设施),我选择了Bootstrap的标签导航。

因此我创建了一个功能来&#34;绘制&#34;该表使用来自三个方向的信息:

  • 列直接来自数据库
  • 在PHP中创建的开始时间(见上文)
  • 已预订的时间和设施已保存在我的$booking_array

由于HTML表是逐行创建的,我认为检查启动时是否也在$booking_array中可用是一种很好的方法,如果是,则添加包含用户名的单元格。 到目前为止工作,但现在我想把所有空闲插槽作为空单元格。所以我尝试了很多,但总是在一个有数百个空行的表中。

在我的上一个方法中,我使用了我在这里找到的函数来检查启动时间是否不在我的多维关联数组($booking_array)中并添加空单元格:

$drawTable = function($funcFormCat, $funcFacId) use ($mpbs_overview_category_query, $times_array, $booking_array) {

echo "<table class='table table-hover'>";
echo "<thead>";
//echo "<th class='text-center'></th>";

foreach ($mpbs_overview_category_query as $overview_formcategories) {
    if ($overview_formcategories->formcategory == $funcFormCat && $overview_formcategories->facility_id == $funcFacId) {
        echo "<th class='text-center' id='$overview_formcategories->facility_id'>" . $overview_formcategories->facility ."</th>";
    }
}
echo "</thead>";

foreach ($times_array as $timeskey => $timesvalue) {
    echo "<tr>";
    // echo "<td class='text-center'>.</td>";
    for ($booking_array_id = 0; $booking_array_id < count($booking_array); $booking_array_id++ ) {
        if ($booking_array[$booking_array_id]['starttime_of_booking'] == $timeskey && $booking_array[$booking_array_id]['facliId'] == $funcFacId ) {
            echo "<td class='text-center'>" . $booking_array[$booking_array_id]['username'] . "</td>";
            echo "</tr>";
        }
        elseif (in_array_r($timeskey, $booking_array)==false) {     
            echo "<td class='text-center'>**</td>";
            echo "</tr>";
            }

        }

}

我的数组确实包含以下格式:

$times_array

Array ( [07:00] => [07:30] => [08:00] => [08:30] => [09:00] => [09:30] => [10:00] => [10:30] => [11:00] => [11:30] => [12:00] => [12:30] => [13:00] => [13:30] => [14:00] => [14:30] => [15:00] => [15:30] => [16:00] => [16:30] => [17:00] => [17:30] => [18:00] => [18:30] => [19:00] => [19:30] => [20:00] => [20:30] => [21:00] => [21:30] => ) 

$booking_array

Array ( [0] => Array ( [starttime_of_booking] => 08:00 [facliId] => 6 [userid] => Mr T [equipment] => Beamer ) [1] => Array ( [starttime_of_booking] => 14:00 [facliId] => 4 [userid] => Mrs. L [equipment] => Flipchart ) [2] => Array ( [starttime_of_booking] => 14:00 [facliId] => 9 [userid] => Mrs. M [equipment] => TV-Set ) [3] => Array ( [starttime_of_booking] => 13:00 [facliId] => 8 [userid] => C.J.P. [equipment] => Stuff ) 

由于我现在正在尝试几个小时并且没有得到正确的概述,我会非常高兴任何提示,提示或建议!

提前致谢。 问候 拉斯

为了澄清,我想要实现的目标,我在这里添加更多信息:

我想要的是创建一个HTML-Table,它来自3个来源:

首先,表格的标题应该通过SQL查询来获取房间名称及其ID。 (<thead><th id='facility_id'>room1</th><th id='facility_id'>room2</th id='facility_id'>...</thead>

然后在第1列的第1个数据行中,应打印来自$times_array的第1个开始时间。 ("<td>".$timeskey."</td>")。

所有剩余的单元格也应格式化为HTML-Cells。

现在是一个棘手的部分(对我来说),因为我想填充那些已经预订的单元格。

例如,会议室由Mr.T先生于07:00至09:00预订。

为了在没有Ajax的情况下实现这一点,我用我的预订数据库表中的数据创建了数组$booking_array

现在我不得不写一个函数,它在我的HTML-Table中提供了所有必要信息。

打印<tr>标记以打开新行。在下一步中,添加具有starttime的单元格。现在我想迭代我的$bookings_array进行任何预订,并将用户名打印到相应的列。

由于我没有这样做,在一张桌子中,我试图通过为每个包含开始时间的房间和带有预订数据/空闲插槽的列创建一个表来实现它。但该表有数百行。

0 个答案:

没有答案