所以,我正在制作这个系统,您可以预订一个座位,但是当我检查这个座位是否已经被保留时,它就搞砸了(这意味着我的循环太糟糕了)。我有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 (我有三个div的座位,只做了顶部的循环,所以不要介意45-68,因为它们是正确的)。我该怎么做才能把座位贴上一次?
发布于 2014-10-03 21:35:22
如果我想我知道你要做什么,你就不需要有那个内部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变量,如果是的话,它将显示保留的座位,如果不是,只显示一个可选择的座位。
发布于 2014-10-03 21:32:46
您的foreach ($list as $obj)在循环中。你预订了三个座位,所以要打印三次。你得把它移出循环。
发布于 2014-10-03 21:33:37
使用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]))https://stackoverflow.com/questions/26187008
复制相似问题