所以我正在制作这个系统,你可以预留一个座位,但是当我正在检查座位是否已被保留时,它会搞砸(意味着我的循环太糟糕了)。我的数据库中有3个测试用户,它与用户一样多次呼叫座位。它甚至可以使保留的座位正确着色。
$sql = "SELECT * FROM users";
$result = mysql_query($sql);
$list = array();
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$reserved = $row["seat"];
$list[] = $reserved;
}
echo '<div id="top-section">';
for($i = 0; $i < 44; $i++) {
$seatCount++;
foreach($list as $obj) {
if($seatCount == $obj) {
echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>';
}
else {
echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>';
}
}
}
echo '</div>';
结果就是这样:http://i.gyazo.com/d10e787cea7028b46c716ac41766456a.png(我有三个座位,只在顶部完成循环所以不要介意45 - 68,因为它们是正确的)。我怎么做才能只发布一次座位?
答案 0 :(得分:0)
你的foreach($ list as $ obj)在循环中。你有三个预订,所以它打印座位三次。你需要在循环之外移动它。
答案 1 :(得分:0)
使用in_array()
:
for ($i = 0; $i < 44; $i++) {
if (in_array($i, $list)) {
echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>';
}
else {
echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>';
}
}
更好的方法是让$list
使用保留座位作为键,而不是值:
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$reserved = $row["seat"];
$list[$reserved] = true;
}
然后你的第二个循环可以使用:
if (isset($list[$i]))
答案 2 :(得分:0)
你可以做这样的事情:
$sql = "SELECT * FROM users";
$result = mysql_query($sql);
$list = array();
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$reserved = $row["seat"];
$list[$reserved] = 1;
}
echo '<div id="top-section">';
for($i = 0; $i < 44; $i++) {
$seatCount++;
if(isset($list[$seatCount]) AND $list[$seatCount] == 1) {
echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>';
}
else {
echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>';
}
}
echo '</div>';
答案 3 :(得分:0)
如果我认为我知道你的目的是什么,你就不需要那个内在的foreach
陈述。
但是你的代码有两个问题。
首先,这个陈述有点多余
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$reserved = $row["seat"];
$list[] = $reserved;
}
为简单起见,将其更改为:
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$list[] = $row["seat"];
}
然后,循环可以看起来像这样(使用in_array
而不是另一个循环):
for($i = 0; $i < 44; $i++) {
$seatCount++;
if(in_array($seatCount, $list)) {
echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>';
} else {
echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>';
}
}
然后,这样,$seatCount
变量将在用户座位中查找,如果是,它将显示预留座位,如果不是,则只显示可选座位。
答案 4 :(得分:0)
你应该使用in_array()并删除一个foreach循环。
<?php
$list = array(1,2,5);
echo '<div id="top-section">';
for($i = 0; $i < 44; $i++) {
if(in_array($i,$list)) {
echo '<div id="seat_'.($i+1).'" class="seat reserved">'.($i+1).'</div>';
}
else {
echo '<div id="seat_'.($i+1).'" class="seat available" onclick="selectSeat('.($i+1).');">'.($i+1).'</div>';
}
}
echo '</div>';
?>