【问题标题】:Looping problems in phpphp中的循环问题
【发布时间】:2014-10-03 21:24:08
【问题描述】:

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

【问题讨论】:

标签: php mysql arrays loops


【解决方案1】:

如果我认为我知道你想要什么,你就不需要那种内部的 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 变量将在用户席位中查找,如果是,它将显示保留席位,如果不是,则仅显示可选席位。

【讨论】:

    【解决方案2】:

    你的 foreach ($list as $obj) 在循环内。你有三个预订,所以它打印了三次座位。你需要把它移到循环之外。

    【讨论】:

      【解决方案3】:

      使用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]))
      

      【讨论】:

        【解决方案4】:

        你可以做这样的事情:

        $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>';
        

        【讨论】:

          【解决方案5】:

          您应该使用 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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-23
            • 2021-12-27
            • 1970-01-01
            • 2021-04-12
            • 2014-05-13
            • 2013-05-15
            相关资源
            最近更新 更多