foreach 循环中的两个数组

Posted

技术标签:

【中文标题】foreach 循环中的两个数组【英文标题】:Two arrays in foreach loop 【发布时间】:2011-05-27 17:15:03 【问题描述】:

我想使用两个数组生成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>';
    
?>

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

【问题讨论】:

两个数组一循环 【参考方案1】:
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',
   ...
);

【讨论】:

在解析表单字段数组时很有用。 这就是所谓的智能编码 避免以非功能代码开始你的答案,只是稍后说它不起作用。否定陈述跨越多个段落时应以否定开头【参考方案2】:

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

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

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

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

【讨论】:

这也可以用于三个数组吗? @xjshiya 不,如果你给他们 3 个参数,你会得到警告:array_combine() 需要 2 个参数,给定 3 个【参考方案3】:

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

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

【讨论】:

【参考方案4】:

使用关联数组:

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

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

我相信与使用 array_combine() 相比,使用关联数组是最明智的方法,因为一旦有了关联数组,您就可以简单地使用 array_keys()array_values() 来获得与之前完全相同的数组.

【讨论】:

+1 array_combine() 已经生成了一个关联数组,您可能希望更清楚地了解初始化它是关联的。【参考方案5】:

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

这对我有用:

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

【讨论】:

【参考方案7】:

您的代码不正确,因为 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++;
        

?>

【讨论】:

就像一个魅力。谢谢你的回答:)【参考方案8】:

为什么不直接合并成一个多维关联数组呢?好像你正在处理这个错误:

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

变成:

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

【讨论】:

称为关联数组,不是多维数组。【参考方案9】:

您可以使用 array_merge 组合两个数组,然后对其进行迭代。

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

【讨论】:

【参考方案10】:

全部经过全面测试

从数组中创建动态下拉列表的 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>';
?>

【讨论】:

hm... 不赞成投票。 Downvoter,理由和关心详细说明?显然完成了“只是因为”。嗯~ 这些不都是一回事吗?除了变量名称之外,我没有看到任何显着差异。【参考方案11】:

走出来……

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

demo

【讨论】:

【参考方案12】:
<?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>';

?>

【讨论】:

【参考方案13】:

foreach 仅适用于单个数组。要逐步遍历多个数组,最好在 while 循环中使用 each() 函数:

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

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

【讨论】:

【参考方案14】:

试试这个而不是 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
  

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

我认为你可以这样做:

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

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

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

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

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:
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】:

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

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

【讨论】:

【参考方案20】:

您应该尝试将 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 `

【讨论】:

【参考方案21】:

很少有数组也可以这样迭代:

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

【讨论】:

【参考方案22】:

这仅在两个数组具有相同计数时才有效。我尝试在 laravel 中,将两个数组都插入到 mysql db 中

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

        $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();
        
        

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案23】:

对我有用

$counter = 0;
foreach($codes as $code)

$codes_array[$counter]=$code;
$counter++;

$counter = 0;
foreach($names as $name)

echo $codes_array[$counter]."and".$name;
$counter++;

【讨论】:

以上是关于foreach 循环中的两个数组的主要内容,如果未能解决你的问题,请参考以下文章

foreach的用法

php foreach输出数组只输出元素的第一个字符

PHP 数组遍历方法大全(foreach,list,each)

关于PHP中foreach循环修改数组值失效的问题

forEach 在javascript中同时循环遍历两个数组[重复]

PHP中使用foreach循环读取数组数据的方法