【问题标题】:PHP: Create array from MySQL to build HTML calendarPHP:从 MySQL 创建数组以构建 HTML 日历
【发布时间】:2018-01-29 06:16:21
【问题描述】:

目前我正在开发一个小型预订系统,以创建已预订时间段的概览。

在我的数据库中,预订信息是这样保存的:

_______________________________________________________________
|id|user_id|     starttime     |      endtime      |facilityID|
---------------------------------------------------------------
|1 |    100|2017-08-21 21:00:00|2017-08-21 22:00:00|        11|
---------------------------------------------------------------

现在我想构建一个 HTML 表格,显示当天的时间表,也代表所有空闲时间段。

<table>
  <thead>
    <th>Time</th>
    <th>Facility #11</th>
    <th>Facility #12</th>
 </thead>

  <tr>
    <td>08:00</td>
    <td>09:00</td>
    ...
    <td>21:00</td>
    <td>22:00</td>
  </tr>

  <tr>
    <td></td>
    <td></td>
    ...
    <td>User 100</td>
    <td></td>
  </tr>
</table>

Time    Facility #11    Facility #12
08:00   09:00   21:00   22:00
        User 100

要自动填充表格,我认为最好是 创建一个关联数组,其中包含所有可能的开始时间作为键,预订信息作为值(如果存在)。

array(xy) {["08:00"][1]=>string(0) "" [2]=>string(0) "" ["09:00"][1]=>string(0) "" [2]=>string(0) "" ... ["21:00"] [1]=>string(3) "100" [2]=>string(2) "11" ... }

因此,我创建了两个要合并为一个的数组。

数组 1 - 开始时间

array1 = array();
   for ($hours = 8; $hours <= 22; $hours++) {
      for ($m = 0; $m < 60; $m += 60) {
          $starttime_html = sprintf('%02u:%02u', $hours, $m);
          $array1[$starttime_html]='';

      }
    }

数组 2 - 预订

array2 = array();
$statement = $pdo->prepare("SELECT id, user_id, starttime, facility_id FROM mpbs_bookings WHERE starttime >= '2017-08-21 00:00:00'");
$statement->execute(array($id));
while($row = $statement->fetch()) {
   $starttime_currentday = explode(" ",$row['starttime']);
   $starttime_curr_hm = substr($starttime_currentday[1],0,5);
   array_push($array2, array($starttime_curr_hm, $row['facility_id'], $row['user_id']));
 }

现在我找不到组合这两个数组的方法。 除此之外,如果有任何关于如何实现我的目标的建议,我都会很高兴。


这是两个数组的内容:

print_r(array1);

Array ( [08:00] => [09:00] => ... => [21:00] => [22:00]=> )


print_r(array2);

Array ( [0] => Array ( [0] => 18:00 [1] => 6 [2] => 22 ) [1] => Array ( [0] => 19:00 [1] => 4 [2] => 11 ) [2] => Array ( [0] => 20:00 [1] => 2 [2] => 5 ) [3] => Array ( [0] => 20:00 [1] => 9 [2] => 8 ) [4] => Array ( [0] => 21:00 [1] => 11 [2] => 34 ) ) 

提前致谢。

拉尔斯

【问题讨论】:

  • 你需要第二个数组做什么?只需使用嵌套循环来输出您的日期和时间,并在内部检查您的数据数组中是否有当前日期和时间的条目......如果有,则输出数据,否则“无”作为当前表的内容细胞...
  • 我同意 CBroe 的观点,你真的不需要第一个数组。但是,如果您坚持使用它,您可以使用array_merge 函数来实现您想要的。 php.net/manual/en/function.array-merge.php
  • 嘿,谢谢你的cmets。我正在尝试这两个建议,但我还没有达到我的目标......我在 PHP 编程方面不是很有经验。
  • 能否请print_r($array1)print_r($array2) 在您的OP 中发帖?只需要2或3条数据而不是完整的集合。
  • 我在原帖中添加了print_r($array1)print_r($array2)

标签: php html mysql arrays


【解决方案1】:

我对 Array2 的结构进行了更改。我这样做是为了我们可以使用array_merge。 array_merge 通过匹配数组键并用我们的新(数组 2)替换旧的(数组 1)来工作。

请查看array2的修改代码和打印输出的解决方案

$array2 = array();
$statement = $pdo->prepare("SELECT id, user_id, starttime, facility_id FROM  mpbs_bookings WHERE starttime >= '2017-08-21 00:00:00'");
$statement->execute(array($id));

while($row = $statement->fetch()) {
   $starttime_currentday = explode(" ",$row['starttime']);
   $starttime_curr_hm = substr($starttime_currentday[1],0,5);

   $array2[$starttime_curr_hm] =  
       array('facliId'=>$row['facility_id'],'userid'=> $row['user_id']);
 }

$mergedArray = array_merge($array1,$array2);
foreach($mergedArray as $date=>$value){
   echo $date;
   echo 'Holding facility_id of '.$value['facliId'].' and user_id of '.$value['userid'].'</br>';
}

【讨论】:

  • 感谢您的代码。不幸的是,它没有按预期工作。我改变了数组的生成方式,我认为现在它正在工作。因此我使用了我在另一个线程中找到的函数:function array_push_assoc (&amp;$array, $key, $value) {' '$array[$key] = $value;' 'return $array; ... array_push_assoc($array1, $starttime_html, array('facID'=&gt;'','userID'=&gt;'')); ... array_push_assoc($array2, $starttime_curr_hm, array('facID'=&gt;$row['facility_id'],'userID'=&gt; $row['user_id']) );
  • 能否请您发布print_r($mergedArray)的内容
  • @Gardinero 我发现了你在我的代码中遇到的问题,我已经更正了。如果您找到了另一种解决方案,那就足够了:)
  • 在这里你可以找到你的代码的内容:Array ( [08:00] =&gt; [09:00] =&gt; [10:00] =&gt; [11:00] =&gt; [12:00] =&gt; [13:00] =&gt; [14:00] =&gt; [15:00] =&gt; [16:00] =&gt; [17:00] =&gt; [18:00] =&gt; [19:00] =&gt; [20:00] =&gt; [21:00] =&gt; [22:00] =&gt; [0] =&gt; Array ( [18:00] =&gt; Array ( [facliId] =&gt; 6 [userid] =&gt; 0 ) ) [1] =&gt; Array ( [18:00] =&gt; Array ( [facliId] =&gt; 4 [userid] =&gt; 0 ) ) [2] =&gt; Array ( [19:00] =&gt; Array ( [facliId] =&gt; 2 [userid] =&gt; 0 ) ) [3] =&gt; Array ( [20:00] =&gt; Array ( [facliId] =&gt; 9 [userid] =&gt; 0 ) ) [4] =&gt; Array ( [21:00] =&gt; Array ( [facliId] =&gt; 11 [userid] =&gt; 0 ) ) )
  • 非常感谢!更正后的代码正在运行!我会检查一下,哪种解决方案最适合我。再次感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 2021-12-14
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多