如何修复 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 嵌套循环我在尝试创建嵌套循环时遇到了一些问题?的主要内容,如果未能解决你的问题,请参考以下文章