在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++; }