如何修复 PHP 嵌套循环我在尝试创建嵌套循环时遇到了一些问题?

Posted

技术标签:

【中文标题】如何修复 PHP 嵌套循环我在尝试创建嵌套循环时遇到了一些问题?【英文标题】:How to fix PHP nested loop I am getting some problem when I am trying to make a nested loop? 【发布时间】: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();

【问题讨论】:

我希望美国紧随其后,然后是所有城市,跳过第一个:伦敦。 【参考方案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);

【讨论】:

以上是关于如何修复 PHP 嵌套循环我在尝试创建嵌套循环时遇到了一些问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的嵌套循环写入多维数组?

使用PHP绘制嵌套循环模式

如何退出两个嵌套循环? [复制]

Ansible 嵌套循环 - 如何遍历循环项?

如何使用连接缓冲区(块嵌套循环)错误修复MySql的LEFT JOIN?

在PHP嵌套循环中渲染项目