我想使用两个数组生成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>';
}
?>
这种方法对我不起作用。有什么建议吗?
答案 0 :(得分:137)
foreach( $codes as $code and $names as $name ) { }
这是无效的。
你可能想要这样的......
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
或者,将代码作为$names
数组的关键字会更容易......
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
答案 1 :(得分:77)
foreach
一次只能运行一个数组。
您的数组的结构方式,您可以array_combine()
将它们转换为键值对数组,然后foreach
该单个数组:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
或者如其他答案所示,您可以改为对关联数组进行硬编码。
答案 2 :(得分:24)
使用array_combine()
将数组融合在一起并迭代结果。
$countries = array_combine($codes, $names);
答案 3 :(得分:6)
使用关联数组:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
我认为使用关联数组是最合理的方法,而不是使用array_combine()
,因为一旦你有一个关联数组,你可以简单地使用array_keys()
或array_values()
来获得你之前拥有的阵列相同。
答案 4 :(得分:3)
为什么不整合成多维关联数组?看起来你错了:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
变为:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
答案 5 :(得分:2)
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);
其他好处是:
如果一个数组比另一个数组短,则回调函数将接收null
值以填补空白。
您可以使用两个以上的数组来迭代。
答案 6 :(得分:2)
而不是foreach循环,请尝试此操作(仅当您的数组具有相同的长度时)。
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</dependency>
<!-- RxJava dependeencies -->
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.2.7</version>
</dependency>
</dependencies>
答案 7 :(得分:2)
这对我有用:
$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>";
}
答案 8 :(得分:2)
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
答案 9 :(得分:2)
走出去......
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
PHP 5.3 +
array_walk($codes, function ($code,$key) use ($names) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
});
在PHP 5.3之前
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
或合并
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
array_walk(array_combine($codes,$names), function ($name,$code){
@$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
答案 10 :(得分:2)
这将从数组创建一个下拉菜单,并自动分配其各自的值。
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
答案 11 :(得分:2)
您可以使用array_merge组合两个数组,然后迭代它们。
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
答案 12 :(得分:1)
我认为你可以这样做:
$ codes = array('tn','us','fr');
$ names = array('突尼斯','美国','法国');
Process
它也适用于关联数组。
答案 13 :(得分:1)
我认为最简单的方法就是以这种方式使用for循环:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
答案 14 :(得分:1)
foreach仅适用于单个数组。要逐步执行多个数组,最好在while循环中使用each()函数:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each()返回有关当前键和数组值的信息,并将内部指针递增1,如果已到达数组末尾,则返回false。此代码不依赖于具有相同键或具有相同类型元素的两个数组。当两个数组中的一个完成时,循环终止。
答案 15 :(得分:0)
你应该在singlr foreach循环中尝试使用put 2数组 假设我有2个阵列 1. $ item_nm 2. $ item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
@foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
@endforeach `
答案 16 :(得分:0)
我通过这种方式解决了像你这样的问题:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
答案 17 :(得分:0)
很少有数组也可以这样迭代:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
答案 18 :(得分:0)
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
现在你可以为每个数组使用$ a ....
$doors[$a]
$windows[$a]
....
}
答案 19 :(得分:0)
array_combine()
在为多个表单输入组合$_POST
多个值时尝试更新购物车中的产品数量,对我来说非常有用。
答案 20 :(得分:0)
这样的代码不正确,因为foreach仅适用于单个数组:
<?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>';
}
?>
替代方案,改为:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count = 0;
foreach($codes as $code) {
echo '<option value="' . $code . '">' . $names[count] . '</option>';
$count++;
}
?>
答案 21 :(得分:-1)
它对我有用
$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}