在foreach循环中有两个数组

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

这是一个例子:

 <?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>'; } ?> 

这种方法不适合我。 有什么build议么?

 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', ... ); 

foreach一次只能在一个数组上运行。

你的数组结构的方式,你可以array_combine()他们到一个键值对的数组,然后foreach单个数组:

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

或者如其他答案所示,您可以改为编码一个关联数组。

使用array_combine()将数组融合在一起并迭代结果。

 $countries = array_combine($codes, $names); 

使用关联数组:

 $code_names = array( 'tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France'); foreach($code_names as $code => $name) { //... } 

我相信使用关联数组是最合理的方法,而不是使用array_combine()因为一旦有了关联数组,您可以简单地使用array_keys()array_values()来获得与之前相同的数组。

为什么不把它们合并成一个多维的关联数组呢? 似乎你正在做这个错误:

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

变为:

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

全部testing完成

从数组中创builddynamic下拉的3种方法。

这将从数组中创build一个下拉菜单,并自动分配其相应的值。

方法#1(法线arrays)

 <?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>'; ?> 


方法#2(法线arrays)

 <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> 


方法#3(关联arrays)

 <?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>'; ?> 

走出去…

 $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>'; }) 
  • 在select

     array_walk(array_combine($codes,$names), function ($name,$code){ @$opts = '<option value="' . $code . '">' . $name . '</option>'; }) echo "<select>$opts</select>"; 

演示

 <?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>'; ?> 

而不是foreach循环,试试这个(只有当你的数组有相同的长度)。

 $number = COUNT($_POST["codes "]);//count how many arrays available if($number > 0) { for($i=0; $i<$number; $i++)//loop thru each arrays { $codes =$_POST['codes'][$i]; $names =$_POST['names'][$i]; //ur code in here } } 

您可以使用array_merge来组合两个数组,然后遍历它们。

 $array1 = array("foo" => "bar"); $array2 = array("hello" => "world"); $both_arrays = array_merge((array)$array1, (array)$array2); print_r($both_arrays); 

我认为你可以这样做:

$ codes = array('tn','us','fr');

$ names = array('突尼斯','美国','法国');

 foreach ($codes as $key => $code) { echo '<option value="' . $code . '">' . $names[$key] . '</option>'; } 

它也应该用于关联数组。

foreach只能用于一个数组。 要遍历多个数组,最好在while循环中使用each()函数:

 while(($code = each($codes)) && ($name = each($names))) { echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>'; } 

each()返回有关当前键和数组值的信息,并将内部指针递增1,如果已到达数组末尾则返回false。 这个代码将不依赖于具有相同键或具有相同types元素的两个数组。 当两个数组中的一个完成时,循环终止。

$ this->为我工作:

 $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>"; 

}

array_combine()对我很好用,同时结合多个表单input中的$_POST多个值,尝试更新购物车中的产品数量。

 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] .... } 

我通过这种方式解决了像你这样的问题:

 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 />"; } 

你应该尝试这个put 2数组在singlr foreach循环假设我有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 ` 

很less数组也可以像这样迭代:

 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, ); } 

我认为最简单的方法就是这样使用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>'; } 

这个对我有用

 $counter = 0; foreach($codes as $code) { $codes_array[$counter]=$code; $counter++; } $counter = 0; foreach($names as $name) { echo $codes_array[$counter]."and".$name; $counter++; }