【问题标题】:How to fix PHP nested loop I am getting some problem when I am trying to make a nested loop?如何修复 PHP 嵌套循环我在尝试创建嵌套循环时遇到了一些问题?
【发布时间】:2021-01-22 22:18:12
【问题描述】:

我期待:

*usa
    london
    california
    sanfransisco
    
*saudiarabia
    makkah
    madina
    jeddah
    

但我只得到第一个国家,例如:

*usa
    london
    california
    sanfransisco
    

我的数据库如下所示:

country         city
---------   ------------
usa             london

usa             california

usa             sanfransisco

saudiarabia     makkah

saudiarabia     madina

saudiarabia     jeddah

我使用的代码:

   require('db_conn_setup.php');
$sql= "SELECT * FROM places";
$result = $conn->query($sql);
if ($result->num_rows > 0){
  while($row = $result->fetch_assoc()) {
      
echo '<ul>
        <li>'.$row["country"].
            '<ul>';
            if ($result->num_rows > 0) 
                while($row = $result->fetch_assoc()) {  
                echo '<li>'.$row["city"].'</li>';}
            '</ul>
        </li>
</ul>';
  } else {
  echo "0 results";
}
$conn->close();

【问题讨论】:

  • 我希望美国紧随其后,然后是所有城市,跳过第一个:伦敦。

标签: php mysql loops while-loop nested


【解决方案1】:

解决你的问题的方法是停止使用mysqli,开始使用PDO。

但是,如果您想使用 mysqli 做同样的事情(这更困难),您需要先准备数据,然后在多维数组上进行相应的循环。

$sql= "SELECT * FROM places";
$result = $conn->query($sql);
$data = [];
foreach($result as $row) {
    $data[$row['country']][] = $row['city'];
}

然后在您的演示逻辑中,您可以像这样循环这个数组:

if($data) {
    echo '<ul>';
    foreach($data as $country => $cities) {
        echo '<li>'.$country;
        echo '<ul>';
        foreach($cities as $city) {
            echo '<li>'.$city;
        }
        echo '</ul>';
    }
    echo '</ul>';
} else {
    echo "0 results";
}

在 PDO 中,您可以将第一部分替换为:

$data = $pdo->query("SELECT * FROM places")
            ->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多