使用foreach PHP回显嵌套数组

时间:2013-11-24 07:26:41

标签: php arrays foreach localization

我见过许多类似的问题,但没有一个可以帮助解释我的问题。 我有一个名为cities的数组,其中包含具有该状态城市的状态的嵌套数组。它看起来像这样:

$cities = array(
    "ca" => array(
        "los-angeles" => "Los Angeles"
    ),
    "wa" => array(
        "bellingham" => "Bellingham",
        "seattle" => "Seattle",
        "tacoma" => "Tacoma"
    )
);

我的PHP代码显示许多HTML select字段:

<?php
foreach ($cities as $state) {
    echo "<select name='city' id='" . $state . "'>";
    foreach ($state as $city => $name) {
        echo "<option value='" . $city . "'>" . $name . "</option>";
    }
}
?>

id的{​​{1}}始终为select。我如何使用密钥,如“ca”或“wa”?

4 个答案:

答案 0 :(得分:1)

问题是你应该使用数组键来选择状态。这是我对您的代码的修订。请注意,我明确指定了state_keystate_value以及city_keycity_value。明确地命名事物有助于调试。我还添加了一个结束</select>元素,以便内容正确呈现。

foreach ($cities as $state_key => $state_value) {

    echo "<select name='city' id='" . $state_key . "'>";
    foreach ($state_value as $city_key => $city_value) {
        echo "<option value='" . $city_key . "'>" . $city_value . "</option>";
    }
    echo "</select>";

}

答案 1 :(得分:0)

尝试使用echo "<select name='city' id='" . $state['los-angeles'] . "'>";代替echo "<select name='city' id='" . $state . "'>";

如果您希望ca作为您的选择元素ID,请使用下面的

 foreach ($cities as $key=>$state) {
    echo "<select name='city' id='" . $key . "'>";
    foreach ($state as $city => $name) {
      echo "<option value='" . $city . "'>" . $name . "</option>";
   }
 }

如果您想要los-angeles作为您选择元素的ID,请使用下面的

   foreach ($cities as $key=>$state) {      
     $SelectId = strtolower(str_replace(" ",'-',$state['los-angeles']));
    echo "<select name='city' id='" . $SelectId . "'>";
    foreach ($state as $city => $name) {
        echo "<option value='" . $city . "'>" . $name . "</option>";
    }
   }

答案 2 :(得分:0)

那是因为第一个foreach循环遍历数组数组。所以每个成员都将成为一个阵列。如果您有id ='" . $state[0],您将看到所述数组的第一个成员。

var_dump功能是你的朋友。

您可以使用array_keys功能获取所有城市。

答案 3 :(得分:0)

foreach ($cities as $key=>$state) {
    echo "<select name='city' id='" . $key . "'>";
    foreach ($state as $city => $name) {
        echo "<option value='" . $city . "'>" . $name . "</option>";
    }
}

更改为

在你的情况下,$ state是一个包含城市的数组。所以它始终显示值为Array()。