划分 foreach 无法正常工作

Posted

技术标签:

【中文标题】划分 foreach 无法正常工作【英文标题】:Dividing a foreach doesn't work properly 【发布时间】: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

【问题讨论】:

【参考方案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)

【讨论】:

我添加了一些额外的解释,以防我首先不清楚(:

以上是关于划分 foreach 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

foreach array_slice无法正常工作

在 foreach 循环中的 if 语句中的 while 循环...无法正常工作

ForEach 不能在 mongodb 上工作,但在本地数组声明中工作正常

ForEach无法识别数组

AngularJS - ForEach 不循环

checkbox knockout点击绑定无法正常工作