首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php中的循环问题

问php中的循环问题
EN

Stack Overflow用户
提问于 2014-10-03 21:24:08
回答 5查看 64关注 0票数 0

所以,我正在制作这个系统,您可以预订一个座位,但是当我检查这个座位是否已经被保留时,它就搞砸了(这意味着我的循环太糟糕了)。我有3个测试用户在我的数据库中,它重复座位的次数与有用户一样多。它甚至可以使预定座位的颜色正确。

代码语言:javascript
复制
$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,因为它们是正确的)。我该怎么做才能把座位贴上一次?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-10-03 21:35:22

如果我想我知道你要做什么,你就不需要有那个内部foreach语句了。

但是,您的代码有两个错误。

首先,这句话有点多余。

代码语言:javascript
复制
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $reserved = $row["seat"];
    $list[] = $reserved;
}

为了简单起见,请将其更改为以下内容:

代码语言:javascript
复制
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $list[] = $row["seat"];
}

然后,这个循环看起来有点像这样(它使用in_array而不是另一个循环):

代码语言:javascript
复制
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变量,如果是的话,它将显示保留的座位,如果不是,只显示一个可选择的座位。

票数 0
EN

Stack Overflow用户

发布于 2014-10-03 21:32:46

您的foreach ($list as $obj)在循环中。你预订了三个座位,所以要打印三次。你得把它移出循环。

票数 0
EN

Stack Overflow用户

发布于 2014-10-03 21:33:37

使用in_array()

代码语言:javascript
复制
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将保留的座位用作键,而不是值:

代码语言:javascript
复制
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $reserved = $row["seat"];
    $list[$reserved] = true;
}

然后,您的第二个循环可以使用:

代码语言:javascript
复制
if (isset($list[$i]))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26187008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档