同步迭代并打印两个大小相同的数组中的值

问题描述 投票:0回答:25

我想使用两个数组生成

selectbox
,一个包含国家/地区代码,另一个包含国家/地区名称。

这是一个例子:

$codes = ['tn', 'us', 'fr'];
$names = ['Tunisia', 'United States', 'France'];

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

这个方法对我来说不起作用。有什么建议吗?

php arrays foreach synchronous
25个回答
177
投票
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',
   ...
);

97
投票

foreach
一次仅对一个数组进行操作。

数组的结构方式,您可以将它们

array_combine()
放入键值对数组中,然后
foreach
单个数组:

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

或者如其他答案中所示,您可以硬编码关联数组。


29
投票

使用

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

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

9
投票

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
    值来填补空白。

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


6
投票

使用关联数组:

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

foreach($code_names as $code => $name) {
   //...
}

我相信使用关联数组是最明智的方法,而不是使用

array_combine()
,因为一旦你有了关联数组,你就可以简单地使用
array_keys()
array_values()
来获得与之前完全相同的数组。


4
投票

这对我有用:

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

4
投票

像这样的代码是不正确的,因为 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++;
        }

?>

3
投票

走出去...

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

演示


2
投票

为什么不直接合并成一个多维关联数组呢?看来你的做法是错误的:

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

变成:

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

2
投票

全部经过充分测试

从数组创建动态下拉列表的 3 种方法。

这将从数组创建一个下拉菜单并自动分配其各自的值。

方法#1(普通数组)

<?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(普通数组)

<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(关联数组)

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

1
投票

您可以使用 array_merge 组合两个数组,然后迭代它们。

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

1
投票

array_combine()
对我来说非常有用,同时组合来自多个表单输入的多个值来尝试更新购物车中的产品数量。
    


1
投票


1
投票

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

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


1
投票

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



0
投票

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



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



0
投票

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

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

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

它也应该适用于关联数组。


0
投票

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



0
投票

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



0
投票

return view('you_name_view', compact('data','data2')); @foreach ($data as $index => $data ) <li> <span>{{$data}}</span> <span>{{$data2[$index]}}</span> </li> @endforeach



-1
投票
现在你可以对每个数组使用 $a....

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



-1
投票

$doors[$a] $windows[$a] .... }



-1
投票

$answer = {"0":"0","1":"1","2":"0","3":"0","4":"1"};

$reason_id = {"0":"17","1":"19","2":"15","3":"19","4":"18"};


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



-2
投票

$k= (array)json_decode($answer); $x =(array)json_decode($reason_id); $number = COUNT(json_decode($reason_id, true)); if($number > 0) { for($i=0; $i<$number; $i++) { $val = new ModelName(); $val->reason_id = $x[$i]; $val->answer =$k[$i]; $val->save(); } }

© www.soinside.com 2019 - 2024. All rights reserved.