从多维数组创建下拉列表

时间:2014-02-24 01:29:49

标签: php arrays foreach

我得到了这个数组:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => tomato
        )

    [1] => Array
        (
            [id] => 2
            [name] => carrot
        )

    [2] => Array
        (
            [id] => 3
            [name] => apple
        )

)

我想在HTML表单中打印每个键/值对,如下所示:

<select>
    <option value="1">tomato</option>
    <option value="2">carrot</option>
    <option value="3">apple</option>
</select>

所以,我使用foreach循环迭代外部数组中的三个项目,然后尝试在一行中打印内部数组中的项目。我坚持到最后一点。到目前为止我最接近的是:

foreach ($food_opts as $key => $value) {
    foreach ($value as $k => $v) {
        echo '<pre>' . $v . '</pre>';
    }
}

这将检索我需要的数据,但不是以可用的格式:

1
tomato
2
carrot
3
apple

简而言之,您如何定位内部数组中的单个项目?类似的东西:

foreach ($food_opts as $key => $value) {
    foreach ($value as $k => $v) {
        echo '<pre>' . $v[0] . ' - ' . $v[1] . '</pre>';
    }
}

我理解为什么上面的代码不起作用,但无法弄清楚如何获取我想要的数据。

2 个答案:

答案 0 :(得分:5)

此处不需要嵌套foreach。只是做:

foreach ($food_opts as $key => $arr) {
    echo '<option value="'.$arr['id'].'">'.$arr['name'].'</option>', PHP_EOL;
}

或者,您可以使用printf()来获得更清晰的方法:

foreach ($food_opts as $key => $arr) {
    printf('<option value="%s">%s</option>', $arr['id'], $arr['name']).PHP_EOL;
}

printf()系列函数使用%字符作为占位符。 %s表示“接受下一个参数并将其打印为字符串”。同样,%d表示“接受下一个参数并将其打印为int”。

答案 1 :(得分:3)

您只需要一个foreach循环来获取所有详细信息,然后您可以使用循环中指定的变量和范围中的键来调用它们,如下所示

echo '<select>';
foreach ($food_opts as $value)
{
    echo '<option value="'.$value['id'].'">'.$value['name'].'</option>';
}
echo '</select>';