创建PHP表,1个数组通过数组索引进行操作

时间:2013-09-29 12:39:27

标签: php mysql arrays html-table

我有这个数据库:

+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+
| id | reservedby | date       | timestart | duration | endtime | cost | details         | status   | dateadded  |
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+
|  1 | enerva     | 09/29/2013 | 9-10am    | 3        | 11-12pm | 1500 | basketball dre! | pending  | 0000-00-00 |
|  2 | mangkanor  | 09/30/2013 | 9-10am    | 8        | 5-6pm   | 4000 | Sabong Dre!     | approved | 0000-00-00 |
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+

我在桌子上使用它:

正如您所看到的,9-10am插槽由enerva保留;该小时的持续时间为3,意味着“3小时”,因此结束时间为11-12点。但是,在我的表格中,我不能在上午10点到11点和晚上11点12分加入'Not Available, taken by: enerva'字符串。

这是我的代码:

<?php 
if (isset($_GET['checkdate'])) {
    $date = urldecode($_GET['date']);
    echo "<br/><br/><h3>Reservations</h3>";
    echo $date;
    $timearray =  array("8-9am","9-10am","10-11am","11-12pm","12-1pm","1-2pm","2-3pm","3-4pm","4-5pm","5-6pm","6-7pm","7-8pm","8-9pm","9-10pm","10-11pm");
    $tablecolor = 1;
    echo "<table style='width: 90%;'>";
    echo "<tr>";
        echo "<th>";
            echo "Time";
        echo "</th>";
        echo "<th>";
            echo "Status";
        echo "</th>";

    echo "</tr>";
    foreach ($timearray as $timearrays) {
        if($tablecolor %2 == 0) {
            echo "<tr>";
        }
        else {
            echo "<tr style='background-color: rgb(0,100,255); background: rgb(0,100,255);'>";
        }

            echo "<th>";
            echo "<h3>$timearrays</h3>";
            echo "</th>";
            echo "<td>";
            $sql = "SELECT * FROM reservation WHERE date = '$date' AND timestart = '$timearrays'";
            $result = mysql_query($sql);
            if(mysql_num_rows($result) == 0){
                echo "<a href='#'><h3 style='color: rgb(255,0,0);'>Reserve</h3></a>";
            }
            else {
                while($row = mysql_fetch_array($result)) {
                    $reservedby = $row['reservedby'];
            }
                echo "<h3>Not Available, taken by: $reservedby.</h3>";
            }
            echo "</td>";
        echo "</tr>";
        $tablecolor++;
    }
    echo "</table>";
}
?>

我猜我必须在持续时间内使用计数器,并在循环的每次迭代时将其减少到零。虽然计数器不为零,但表格将显示'not available, reserved by: enerva'字符串;一旦达到零,它将显示'reserve'链接。但我找不到办法去做。

有什么方法或其他方式吗?我应该查看indexof数组,找出starttime和endtime的两个索引之间的区别吗?

2 个答案:

答案 0 :(得分:0)

从您对我的评论的回答中,它本身不会是一个问题,但您可能必须在不同的列上显示并发预留(在现有代码中处理起来有点棘手)或者只是在同一个{{1 },用<td></td>分隔。这就是我想要的,有时候有点懒惰:)

针对您的具体问题,只需在<br />循环中使用数据库中的duration列,并使用递增计数器:

while

有点过于简单,但它应该可以解决问题。

在您的并发预留问题上,实际上最好更改您的数据库(如果您不想以这种方式工作,则不是'重构'):因为您的所有时段都是1小时,所以只需输入开始时间24小时格式并将您的SQL查询更改为$i = 1; while ($i <= $row['duration']) { echo 'Not available'; $i = $i+1; } 。使用多维数组,您可以将键与开始时间进行比较,并仍然像您一样显示时间段。

修改 找到了一种快速帮助的方法。您只需在数据库中以24小时格式输入开始和结束时间,即可使用以下代码。如上所示,我没有时间测试它,但我看不出它会失败的地方。

"SELECT * FROM reservation WHERE date = '$date' ORDER BY timestart;"

答案 1 :(得分:-1)

试试这个

else {
    while($row = mysql_fetch_array($result)) {
        echo "<h3>Not Available, taken by: $row[reservedby].</h3>";
        echo "</td>";
        echo "</tr>";
    }            
}