foreach循环中的两个数组

med*_*edk 92 php arrays foreach

我想生成一个selectbox使用两个数组,一个包含国家代码,另一个包含国家名称.

这是一个例子:

<?php
    $codes = array('tn','us','fr');
    $names = array('Tunisia','United States','France');

    foreach( $codes as $code and $names as $name ) {
        echo '<option value="' . $code . '">' . $name . '</option>';
    }
?>
Run Code Online (Sandbox Code Playgroud)

这种方法对我不起作用.有什么建议?

ale*_*lex 144

foreach( $codes as $code and $names as $name ) { }
Run Code Online (Sandbox Code Playgroud)

那是无效的.

你可能想要这样的东西......

foreach( $codes as $index => $code ) {
   echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Run Code Online (Sandbox Code Playgroud)

或者,将代码作为$names数组的关键要容易得多......

$names = array(
   'tn' => 'Tunisia',
   'us' => 'United States',
   ...
);
Run Code Online (Sandbox Code Playgroud)

  • 避免以非功能性代码开始你的答案,只是后来才说它不起作用。当否定陈述跨越多个段落时,应以否定开头 (2认同)

Bol*_*ock 82

foreach 一次只能运行一个阵列.

你的数组的结构方式,你可以将array_combine()它们变成一个键值对数组,然后foreach是单个数组:

foreach (array_combine($codes, $names) as $code => $name) {
    echo '<option value="' . $code . '">' . $name . '</option>';
}
Run Code Online (Sandbox Code Playgroud)

或者如其他答案所示,您可以改为对关联数组进行硬编码.


Ign*_*ams 25

用于array_combine()将阵列融合在一起并迭代结果.

$countries = array_combine($codes, $names);
Run Code Online (Sandbox Code Playgroud)


Jac*_*kin 6

使用关联数组:

$code_names = array(
                    'tn' => 'Tunisia',
                    'us' => 'United States',
                    'fr' => 'France');

foreach($code_names as $code => $name) {
   //...
}
Run Code Online (Sandbox Code Playgroud)

我相信使用关联数组是最明智的方法,而不是使用array_combine()因为一旦你有一个关联数组,你可以简单地使用array_keys()array_values()得到你以前完全相同的数组.


Erm*_*mac 6

array_map似乎也适用于此

$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');

array_map(function ($code, $name) {
    echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Run Code Online (Sandbox Code Playgroud)

其他好处是:

  • 如果一个数组比另一个短,则回调接收null值以填补空白。

  • 您可以使用 2 个以上的数组进行迭代。


小智 5

这对我有用:

$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
    echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}
Run Code Online (Sandbox Code Playgroud)