【问题标题】:foreach with three variables add具有三个变量的 foreach 添加
【发布时间】:2011-12-06 13:56:34
【问题描述】:

我想对 3 个变量

使用 foreach 函数

我在我的页面中使用此代码:

foreach (array_combine($online_order_name, $online_order_q) as $online_order_name1 =>
    $online_order_q1) {
    mysql_query("insert into .......
}

我该怎么做:

<?
foreach (array_combine($online_order_name, $online_order_q,$third_variable) as
    $online_order_name1 => $online_order_q1 => $third_variable2) { 
?>

谢谢

【问题讨论】:

标签: php arrays for-loop foreach


【解决方案1】:

我认为array_combineforeach 不可能做到这一点,因为它们专门针对关联数组中的键/值 进行操作。 PHP 没有元组作为内置数据结构。

【讨论】:

    【解决方案2】:

    我想这将解决您的需求:

    <?php
    $A=array(1,2,3);
    $B=array('a','b','c');
    $C=array('x','y','z');
    
    foreach (array_map(NULL, $A, $B, $C) as $x) {
      list($a, $b, $c) = $x;
      echo "$a $b $c\n";
    }
    

    【讨论】:

    • 内置了“array_combine”函数;)
    【解决方案3】:
    for ($i = 0, $length = count($array1); $i < $length; $i++) {
        list($a, $b, $c) = array($array1[$i], $array2[$i], $array3[$i]);
        ...
    }
    

    您应该考虑一个更好的数组结构,尽管这不需要您从三个不同的数组中提取信息。比如:

    $orders = array(
        array('name' => 'Foo', 'q' => 'bar', 'third' => 'Baz'),
        ...
    );
    

    【讨论】:

      【解决方案4】:

      foreach 只对一个迭代器进行迭代,并提供一个键和一个值。这就是在 PHP 中定义迭代器的方式。

      在您的问题中,您写道您需要多个值(但不是键,但我认为这不会造成伤害)。这不是开箱即用的。

      但是,您可以创建一个迭代器,允许您一次迭代多个迭代器。 PHP 附带的一个基类称为MultipleIterator。然后,您可以创建自己的 ForEachMultipleArrayIterator,让您在每次迭代时轻松指定多个键和值:

      $a = array(1,2,3);
      $b = array('b0' => 'a', 'b1' => 'b', 'b2' => 'c');
      $c = array('c0' => 'x', 'c1' => 'y', 'c2' => 'z');
      
      $it = new ForEachMultipleArrayIterator(
          //    array keyvar    valuevar
          array($a,  'akey' => 'avalue'), 
          array($b,  'bkey' => 'bvalue'),
          array($c,  'ckey' => 'cvalue')
      );
      
      foreach($it as $vars)
      {
          extract($vars);
          echo "$akey=$avalue, $bkey=$bvalue and $ckey=$cvalue \n";
      }
      
      class ForEachMultipleArrayIterator extends MultipleIterator
      {
          private $vars;
          public function __construct()
          {
              parent::__construct();
      
              $arrays = func_get_args();
      
              foreach($arrays as $set)
              {
                  if (count($set) != 2)
                      throw new invalidArgumentException('Not well defined.');
                  $array = array_shift($set);
                  if (!is_array($array))
                      throw new InvalidArgumentException('Not an array.');
                  $this->vars[key($set)] = current($set);
                  parent::attachIterator(new ArrayIterator($array));
              }
      
          }
          public function current()
          {
              return array_combine(array_keys($this->vars), parent::key())
                  + array_combine($this->vars, parent::current());
          }
      }
      

      Demo - 但是如果你已经走到了那一步,我很确定你想做的事情很明显可以通过实际迭代其他东西来更容易地解决。上面的例子基本一样:

      foreach(array_map(NULL, array_keys($a), $a, array_keys($b), $b, array_keys($c), $c) as $v)
      {
          list($akey, $avalue, $bkey, $bvalue, $ckey, $cvalue) = $v;
          echo "$akey=$avalue, $bkey=$bvalue and $ckey=$cvalue \n";
      }
      

      所以最好让你的数组按正确的顺序排列然后处理它们:)

      另请参阅:Multiple index variables in PHP foreach loop

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-10
        • 2013-05-27
        • 2021-06-11
        • 2023-01-10
        • 1970-01-01
        • 2021-06-28
        • 2023-03-13
        相关资源
        最近更新 更多