2011-10-13 28 views
1

我想使用的foreach功能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) { 
?> 

謝謝

+0

這是什麼語言?看起來像PHP。 –

+0

是的,它是PHP語言 –

+0

請不要在這樣的循環內運行函數。 –

回答

0

我不相信這是poss由於它們專門用於關聯數組中的鍵/值,因此可以使用array_combineforeach。 PHP沒有作爲內置數據結構的元組。

4

我想這將解決你的需要:

<?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"; 
} 
+0

「array_combine」函數內置; ) – hakre

0
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'), 
    ... 
); 
1

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

+0

+1擴展'MultipleIterator'的好方法.... – Baba