【问题标题】:Store MySQL results in PHP array for two queries将 MySQL 结果存储在 PHP 数组中以进行两个查询
【发布时间】:2016-03-30 14:34:52
【问题描述】:

如何创建、存储和输出使用两个不同 mysql 查询的数组?

我试着做一个简单的例子。

$select1 = "SELECT country_id, country_name FROM countries ...";
while ($select1) {
   ...store country results in array...

  $select2 = "SELECT city_id, city_name FROM cities where '" . $select1['country_id'] . "'..."); // depends on select1
  while ($select2) {
    ...store city results in array...
  }

}

**output something like this:**

country_id = 1
country_name = United States

  city_id = 1
  city_name = New York

  city_id = 2
  city_name = Las Vegas

country_id = 2
country_name = Canada

  city_id = 3
  city_name = Ottawa

【问题讨论】:

  • 你想得到所有国家的所有城市吗?

标签: php mysql arrays


【解决方案1】:

我不知道您是否在检查错误、准备或逃避您的查询,但请这样做。

要生成你的数组,你可以这样做:

    $list = [];
    $countries = $link->query("SELECT country_id, country_name FROM countries ...");

    while ($country_row /*fetch from $countries*/) {

        $country_id = $country_row['country_id']; 

        $country_info = [
                'country_id' => $country_id,
                'country_name' => $country_row['country_name'],
                'country_cities' => []
         ];

        $cities_stmt = "SELECT city_id, city_name FROM cities where $country_id...";
        $cities = $link->query($cities_stmt);

        while ($city_row /*fetch from $cities*/) {

            $city_id = $city_row['city_id'];

            $country_info['country_cities'][$city_id] = [
                    'city_id' => $city_id,
                    'city_name' => $city_row['city_name']
            ];
        }

        $list[$country_id] = $country_info;
    }

要显示您的数组,您可以这样做:

    foreach ( $list as $country_id => $country_info ) {

        echo "Country ID: $country_id<br />";
        echo 'Country Name: ' . $country_info['country_name'] . '<br />';
        echo 'Country Cities:<br />';

        $cities = $country_info['country_cities']; 

        foreach ( $cities as $city_id => $city_info ) {

                echo "   City ID: $city_id<br />";
                echo '   City Name: ' . $city_info['city_name'] . '<br />';
        }

        echo '<br />';
    }

另外,如果您知道国家/地区 ID 或城市 ID,您可以这样做:

    echo 'City Name: ' . $list[$country_id]['country_cities'][$city_id]['city_name'] . '<br />';

【讨论】:

    【解决方案2】:

    使用您的 country_id 作为数组的键。所以基本上,

    $select1 = mysqli_query("SELECT country_id, country_name FROM countries");
    while ($country_row = mysqli_fetch_array($select1, MYSQLI_ASSOC)) {
       $array[$country_id]['country_id'] = $country_row ['country_id'];
       $array[$country_id]['country'] = $country_row['country_name'];
    
      $select2 = mysqli_query("SELECT city_id, city_name FROM cities where '" . $select1['country_id'] ."' "); // depends on select1
      while ($city_row = mysqli_fetch_array($select2, MYSQLI_ASSOC)) {
       $array[$country_id]['cities'][]['city_id'] = $city_row['city_id'];
       $array[$country_id]['cities'][]['city_name'] = $city_row['city_name']
      }
    }
    

    为了使用 foreach 将这些打印出来(正如您在 cmets 中所要求的那样),您必须遍历数组的两个级别

    foreach($array as $country){
       //Loop through the countries that we queried and stored 
       echo 'Country Name: '.$country['country_name'].'<br/>';
       echo 'Country ID: '.$country['country_id'].'<br/>';
       echo 'Cities in country: <br/>';
       //Loop through the cities within this country
       foreach($country['cities'] as $city){
          echo 'City ID: '.$city['city_id'].'<br/>';
          echo 'City Name: '.$city['city_name'].'<br/>';
       }
    
    }
    

    【讨论】:

    • 我如何用foreach()输出数组?
    • foreach($arr as $a){ $a['country']; //Country $a['country_id']; //Country id foreach($a['cities'] as $city){ } }
    • 如果你赶时间,你为什么回答?除非您已经了解基础知识,否则您的回答不是很有帮助。如果你知道基础知识,你就不会问这个问题。所以这对任何人都没有帮助。它只会惹恼任何寻求与我相同答案的人。
    • 我要去开会。我将更新我的答案以进一步详细说明,但在评论中我无法准确提供很多细节。
    【解决方案3】:

    获取一个查询的输出并将其邮件合并到嵌套循环中的另一个查询中是一种反模式。使用连接:

    select country_ID, country_name,
      City_Id, city_name
    From countries cn
    Inner join cities ct
    On CT.country_id = cn.country_ID
    

    那么……

    $cities=array();
    $country_names=array();
    
    While($r=mysqli_fetch_array($handle)) {
         $country_names[$r['country_id']]=$r['country_name'];
         If (!is_array($cities[$r['country_id'])) $cities[$r['country_id']]=array();
         $cities[$r['country_id']][$r['city_id']]=$r['city_name'];
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-29
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2012-08-26
      • 1970-01-01
      • 2016-04-03
      相关资源
      最近更新 更多