【问题标题】:Two arrays in foreach loopforeach 循环中的两个数组
【发布时间】:2020-10-11 14:49:30
【问题描述】:

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

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

【问题讨论】:

  • 两个数组一循环

标签: php arrays foreach


【解决方案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++;
                                }
                                

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2019-05-15
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-08-08
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多