php中的循环问题

时间:2014-10-03 21:24:09

标签: php mysql arrays loops

所以我正在制作这个系统,你可以预留一个座位,但是当我正在检查座位是否已被保留时,它会搞砸(意味着我的循环太糟糕了)。我的数据库中有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,因为它们是正确的)。我怎么做才能只发布一次座位?

5 个答案:

答案 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>';
?>

演示:https://eval.in/201702