我有这个数据库:PHP创建表1个阵列通过数组索引操作
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+ | 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上午10点位置由Evava预留;那个小时的持续时间是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两个索引之间的区别吗?
我可以建议你为'date','timestart','duration'和'endtime'列使用时态数据类型吗?事实上,前两者应该可以合并成一个专栏;保留后两者是多余的。 – eggyal
一个大问题:是否有可能在同一时间有不同的保留? – Sylvain
你肯定需要在这里重构。作为@eggyal所说的,除了每小时查询数据库的效率非常低。查询并保存到阵列(实际上可以用作散列表)一次所有需要的数据库行,然后在创建数组期间,检查数组是否包含适当的条目。 – kasitan