回声嵌套数组';s使用foreach PHP


Echo nested array's with foreach PHP

我见过很多类似的问题,但没有一个能帮助解释我的问题。我有一个名为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>";
    }
}
?>

selectid总是Array。我怎样才能使用钥匙,比如"ca"或"wa"?

问题是您应该使用数组键来选择状态。这是我对你的代码的修改。注意,我已经明确命名了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>";
}

这是因为第一个foreach循环要遍历数组。所以每个成员都将是一个数组。如果你有id ='" . $state[0],你会看到该数组的第一个成员。

CCD_ 11函数是您的朋友。

使用array_keys函数可以得到所有的城市。

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

更改为该

在您的案例中,$state是一个包含城市的数组。所以它总是将值显示为Array()。

尝试使用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>";
    }
   }