Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:从MySQL创建数组以构建HTML日历_Php_Html_Mysql_Arrays - Fatal编程技术网

PHP:从MySQL创建数组以构建HTML日历

PHP:从MySQL创建数组以构建HTML日历,php,html,mysql,arrays,Php,Html,Mysql,Arrays,目前,我正在开发一个小型预订系统,我想创建一个已预订时段的概览 在我的数据库中,预订信息保存如下: _______________________________________________________________ |id|user_id| starttime | endtime |facilityID| --------------------------------------------------------------- |1 |

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

在我的数据库中,预订信息保存如下:

_______________________________________________________________
|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
因此,我创建了两个数组,希望将它们合并为一个

阵列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]='';

      }
    }
现在我没有找到一种方法来组合这两个数组。 除此之外,对于如何实现我的目标的任何建议,我都很高兴


以下是两个数组的内容:

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 ) ) 
提前谢谢


拉尔斯

我改变了阵列2的结构。我这样做是为了我们可以利用array\u 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>';
}
$array2=array();
$statement=$pdo->prepare(“从mpbs预订中选择id、用户id、开始时间、设施id,其中开始时间>='2017-08-21 00:00:00'”);
$statement->execute(数组($id));
而($row=$statement->fetch()){
$starttime_currentday=爆炸(“,$row['starttime']);
$starttime\u curr\u hm=substr($starttime\u currentday[1],0,5);
$array2[$starttime\u curr\u hm]=
数组('facliId'=>$row['facility\u id'],'userid'=>$row['user\u id']);
}
$mergedArray=array\u merge($array1,$array2);
foreach($mergedArray作为$date=>$value){
echo$日期;
回显“持有机构id为“$value['facliId']”和用户id为“$value['userid']”。
; }
我更改了Array2的结构。我这样做是为了我们可以利用array\u 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>';
}
$array2=array();
$statement=$pdo->prepare(“从mpbs预订中选择id、用户id、开始时间、设施id,其中开始时间>='2017-08-21 00:00:00'”);
$statement->execute(数组($id));
而($row=$statement->fetch()){
$starttime_currentday=爆炸(“,$row['starttime']);
$starttime\u curr\u hm=substr($starttime\u currentday[1],0,5);
$array2[$starttime\u curr\u hm]=
数组('facliId'=>$row['facility\u id'],'userid'=>$row['user\u id']);
}
$mergedArray=array\u merge($array1,$array2);
foreach($mergedArray作为$date=>$value){
echo$日期;
回显“持有机构id为“$value['facliId']”和用户id为“$value['userid']”。
; }
第二个阵列的用途是什么?只需使用嵌套循环输出日期和小时,并在内部检查数据数组中是否有当前日期和时间的条目。。。如果是,则输出数据,否则“nothing”作为当前表单元格的内容……我同意CBroe,您实际上不需要第一个数组。但是,如果您坚持使用它,您可以使用
array\u merge
函数来实现您想要的功能。嘿,谢谢你的评论。我正在尝试这两个建议,但我还没有达到我的目标。。。我对PHP编程不是很有经验。你能不能
print\r($array1)
print\r($array2)
请在你的OP中发布?只需要2到3条数据,而不是完整的数据集。我在我原来的帖子中添加了
print\r($array1)
print\r($array2)
。你需要第二个数组做什么?只需使用嵌套循环输出日期和小时,并在内部检查数据数组中是否有当前日期和时间的条目。。。如果是,则输出数据,否则“nothing”作为当前表单元格的内容……我同意CBroe,您实际上不需要第一个数组。但是,如果您坚持使用它,您可以使用
array\u merge
函数来实现您想要的功能。嘿,谢谢你的评论。我正在尝试这两个建议,但我还没有达到我的目标。。。我对PHP编程不是很有经验。你能不能
print\r($array1)
print\r($array2)
请在你的OP中发布?只需要2到3条数据,而不是完整的数据集。我在我原来的帖子中添加了
print\r($array1)
print\r($array2)
。谢谢你的代码。不幸的是,它没有像预期的那样工作。我改变了数组的生成方式,我认为现在它可以工作了。因此,我使用了在另一个线程中找到的一个函数:
functionarray\u push\u assoc(&$array,$key,$value){'$array[$key]=$value;''return$array;
array\u push\u assoc($array1,$starttime\u html,array('facID'=>,'userID'=>);
array\u push\u assoc($array2,$starttime\u curr\u hm,array('facID'=>$row['facility\u id'],'userID'=>$row['user\u id']);
您能发布
打印($mergedArray)
contents@Gardinero我发现了你在我的代码中遇到的问题,我已经纠正了。如果你找到了其他解决方案,那就足够公平了:)您可以在这里找到代码的内容:
Array([08:00]=>[09:00]=>[10:00]=>[11:00]=>[12:00]=>[13:00]=>[14:00]=>[15:00]=>[16:00]=>[17:00]=>[19:00]=>[20:00]=>[21:00]=>[22:00]=>Array([18:00]=>Array([18:00]=>Array([FacID]=>6[FacID]=>1]=>userid]=>Array]=>0))[2]=>Array([19:00]=>Array([facliId]=>2[userid]=>0))[3]=>Array([20:00]=>Array([facliId]=>9[userid]=>0))[4]=>Array([21:00]=>Array([facliId]=>11[userid]=>0)))
非常感谢!更正后的代码正在运行!我会检查,哪些解决方案最适合我。再次感谢您的努力。感谢您的代码。不幸的是,它没有按预期工作。我更改了数组的生成方式,我想现在它正在运行。因此,我使用了在另一个线程中找到的函数:
funct离子阵列
$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>';
}