【问题标题】:Dividing a foreach doesn't work properly划分 foreach 无法正常工作
【发布时间】:2014-02-15 20:30:05
【问题描述】:

我有按国家划分城市列表的代码:

<?php
$pdo = new PDO(...);
$cities = $pdo->query('SELECT `city`, `country` FROM `cities` ORDER BY `id` ASC');
$cities->execute();
$data = array();
foreach($cities as $row) {
$data[$row['country']][] = $row['city'];
}
foreach($data as $country){
echo "<optgroup label='{$country}'>";
foreach($country as $city){
echo "<option value='{$city}'>{$city}</option>";
}
echo "</optgroup>";
}
?>

我在需要的地方获得了 optgroups,但使用单词“Array”而不是 value

【问题讨论】:

    标签: php arrays pdo foreach


    【解决方案1】:

    那是因为$country 是一个数组。你想要主数组的那个元素的键。您可以通过以下方式实现:

    foreach($data as $country => $cities){
    echo "<optgroup label='{$country}'>";
      foreach($cities as $city){
      echo "<option value='{$city}'>{$city}</option>";
      }
    echo "</optgroup>";
    }
    

    通过这种方式,您还可以获取密钥。你的数组是这样的:

    $data = array(
      "Spain" => array(
        "Madrid",
        "Barcelona",
        "Valencia"),
      "UK" => array(
         "London",
         "Oxford"));
    

    所以你试图在你的脚本中访问它(第一次迭代):

    echo array(
        "Madrid",
        "Barcelona",
        "Valencia");
    

    这不起作用(它会打印数组)。相反,您想访问“西班牙”键,可以通过编写 foreach 来访问它:

     foreach ($smth as $Key => $Value)
    

    【讨论】:

    • 我添加了一些额外的解释,以防我首先不清楚(:
    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2021-10-15
    • 1970-01-01
    • 2017-07-21
    • 2018-12-05
    相关资源
    最近更新 更多