【问题标题】:Multiple index variables in PHP foreach loopPHP foreach循环中的多个索引变量
【发布时间】:2011-05-08 15:40:39
【问题描述】:

是否可以在 PHP 中使用带有多个“索引”变量的 foreach 循环,类似于以下(不使用正确的语法)?

foreach ($courses as $course, $sections as $section)

如果没有,有没有达到相同结果的好方法?

【问题讨论】:

  • 您可能需要澄清一下。您是要循环遍历 2D 数组还是 2 个数组?
  • 不确定这将如何工作?你能解释一下你在做什么吗?您可以在迭代之前有一个嵌套的 foreach 或组合数组。让我们知道您想要做什么,我们可以帮助您做到这一点。

标签: php loops foreach for-loop


【解决方案1】:

为了达到你可以做到的结果

foreach (array_combine($courses, $sections) as $course => $section)

但这仅适用于两个数组

【讨论】:

  • 注意;如果$courses 是数字字符串,它们将变成整数。
  • 希望我不会复活一个太死的线程。但是,我试图实现同样的目标,我有过一秒钟,但我不认为它有效,但它没有,但我一生都记不起我输入的代码。我是试图让类别和价值进入数据库。 foreach($_POST['category'] as $i => $category) { // 从 post 中获取值。 $category = mysql_real_escape_string($category); $value = mysql_real_escape_string($_POST['value'][$i]);
  • 如果两个数组有不同的值怎么办
【解决方案2】:

如果两个数组的大小相同,您可以使用 for 循环:

for($i=0, $count = count($courses);$i<$count;$i++) {
 $course  = $courses[$i];
 $section = $sections[$i];
}

【讨论】:

    【解决方案3】:

    试一试-

    1)

    <?php
    $FirstArray = array('a', 'b', 'c', 'd');
    $SecondArray = array('1', '2', '3', '4');
    
    foreach($FirstArray as $index => $value) {
        echo $FirstArray[$index].$SecondArray[$index];
        echo "<br/>";
    }
    ?>
    

    或 2)

    <?php
    $FirstArray = array('a', 'b', 'c', 'd');
    $SecondArray = array('1', '2', '3', '4');
    
    for ($index = 0 ; $index < count($FirstArray); $index ++) {
      echo $FirstArray[$index] . $SecondArray[$index];
      echo "<br/>";
    }
    ?>
    

    【讨论】:

      【解决方案4】:

      你需要像这样使用嵌套循环:

      foreach($courses as $course)
      {
          foreach($sections as $section)
          {
          }
      }
      

      当然,这将遍历每门课程的每个部分。

      如果您想查看每一对,最好使用包含课程/部分对的对象并循环这些对象,或者确保索引相同并执行以下操作:

      foreach($courses as $key => $course)
      {
          $section = $sections[$key];
      }
      

      【讨论】:

      • 我已经在 Wordpress 中成功使用了接受的答案和上面的$courses as $key =&gt; $course 答案。不同之处在于,接受的答案仅限于两个自定义字段,而此答案允许任意数量的字段,因此更加灵活。
      【解决方案5】:

      不,因为这些数组可能有其他数量的项目。

      你必须明确地写出这样的东西:

      for ($i = 0; $i < count($courses) && $i < count($sections); ++$i) {
          $course = $courses[$i];
          $section = $sections[$i];
      
          //here the code you wanted before
      }
      

      【讨论】:

      • 预执行你的 '$i
      • 我处理非常大的项目,这些项目在高负载下工作,通常这并不重要,因为单个 SQL 查询比 php count 慢 1000 :)。如果你必须使用非常大的数组,那么应用程序设计就有问题。
      • 在参数中使用 Count 会导致非常昂贵的事务。
      【解决方案6】:

      不,这可能是 PHP 的数组游标有用的少数情况之一:

      reset($sections);
      foreach ($courses as $course)
      {
       list($section) = each($sections);
      }
      

      【讨论】:

        【解决方案7】:

        这到底能做什么? $courses 和 $sections 是否只是两个单独的数组,并且您想对每个数组中的值执行相同的功能?你总是可以这样做的:

        foreach(array_merge($courses, $sections) as $thing) { ... }
        

        当然,这对array_merge 做出了所有通常的假设。

        还是$sections 来自$course 而你想为每门课程的每个部分做点什么?

        foreach($courses as $course) {
            foreach($sections as $section) {
                // Here ya go
            }
        }
        

        【讨论】:

          【解决方案8】:

          喜欢这样吗?

          foreach($array as $b=>$c){
          
          }
          

          【讨论】:

            猜你喜欢
            • 2013-05-27
            • 2014-05-27
            • 2011-12-09
            • 1970-01-01
            • 1970-01-01
            • 2023-04-06
            • 1970-01-01
            • 2012-12-20
            相关资源
            最近更新 更多