Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复PHP嵌套循环我在尝试创建嵌套循环时遇到了一些问题?_Php_Mysql_Loops_While Loop_Nested - Fatal编程技术网

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

如何修复PHP嵌套循环我在尝试创建嵌套循环时遇到了一些问题?,php,mysql,loops,while-loop,nested,Php,Mysql,Loops,While Loop,Nested,我期待着: *usa london california sanfransisco *saudiarabia makkah madina jeddah 但我得到的第一个国家是: *usa london california sanfransisco 我的数据库如下所示: country city --------- ------------ usa

我期待着:

*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();
require('db_conn_setup.php');
$sql=“从位置选择*”;
$result=$conn->query($sql);
如果($result->num_rows>0){
而($row=$result->fetch_assoc()){
回声'
  • “.$行[“国家”]。 “
      ”; 如果($result->num_rows>0) 而($row=$result->fetch_assoc()){ 回显“
    • ”.$row[“城市]。
    • ”;} “
'; }否则{ 回显“0结果”; } $conn->close();
解决问题的方法是停止使用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";
}

我希望美国紧随其后的是所有城市,而不是第一个:伦敦。
$data = $pdo->query("SELECT * FROM places")
            ->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN);