2011-04-12 69 views
10

我是PHP新手。我有兩個大小相同的數組$array1$array2。我一直在使用foreach遍歷數組遍歷像這樣:我可以通過foreach循環兩個大小相等的循環嗎?

foreach($array1 as $element1) { 
     //Do stuff with $element1 
} 

foreach($array2 as $element2) { 
     //Do stuff with $element2 
} 

,但現在我想在同一時間通過兩個陣列迭代,讓我有機會獲得循環體中的$element1$element2

我該怎麼做?

+3

第一個數組中的*鍵*與第二個數組中的*鍵*是否相同?這個細節將決定答案。 – Charles 2011-04-12 21:06:49

+0

@Charles我相信如此 – Adam 2011-04-12 21:11:17

+0

優秀,這使得這很容易。 – Charles 2011-04-12 21:13:13

回答

10
while (($element1 = next($array1)) !== false) { 
    $element2 = next($array2); 
    // Do something 
} 

但它會失敗,如果false$array1允許的值。如果(在這種情況下)false$array2允許,你可以交換兩個

A「的foreach」 - 溶液(如果同時共享同一個密鑰)

foreach ($array1 as $i => $element1) { 
    $element2 = $array2[$i]; 
    // Do something 
} 

第三(我覺得相當不錯)溶液,這只是允許原始類型在$array1

foreach (array_combine(array_values($array1), array_values($array2)) as $element1 => $element2) { 
    // Do something 
} 
+0

只要在第一個數組中沒有'false','next'技巧就會工作。 – Charles 2011-04-12 21:11:10

+0

是的,我知道,但我沒有找到一個(不是很複雜)的解決方案。但是,我添加了其他兩種方法,至少有一種方法適合:)第三種方法對我來說很不錯,但也有其侷限性。 – KingCrunch 2011-04-12 21:15:40

1

使用一個for循環,而不是...

for($i = 0;$i<count($array1);$i++) { 
    /* access $array1[$i] and $array2[$i] here */ 
} 

如果數組的索引是數字這將工作與同爲兩個陣列

+0

僅適用於數值數組。 – 2011-04-12 21:09:33

+0

這不是** foreach **循環...問題'我可以通過foreach循環兩個大小相等的循環嗎?'但是,它適用於數字作爲鍵:) – Wh1T3h4Ck5 2011-04-12 21:11:15

+1

@ Wh1T3h4Ck5,有更多的方法來迭代在PHP中的數組,而不是皮膚的貓。所有這些*都可以在特定的情況下適用。 – Charles 2011-04-12 21:12:17

0

什麼

$i = 0; 
foreach($array1 as $element) { 

    // Do stuff with the element 
    $stuff_from_this_array = $element; 
    $stuff_from_other_array = $array2[$i]; 
    $i++; 

} 

你'd顯然想把$ stuff_this_array和$ stuff_from_other_array變成更持久的東西,但也許這會給你一個想法。

+0

當數組沒有數字順序鍵時,這會中斷。 – Charles 2011-04-12 21:09:58

2

Each返回包含的鍵和值的陣列,並且使指針到下一個元素。一旦超過最後一個元素,它將返回false。

// Iterate until one of the arrays is complete 
while (($a = each($array_a)) !== false && ($b = each($array_b)) !== false) { 
    echo "The key:value from array_a is {$a['key']}:{$a['value']}.\n"; 
    echo "The key:value from array_b is {$b['key']}:{$b['value']}.\n"; 
} 

要完全遍歷這兩個數組,請使用||而不是& &。

+0

......我甚至都不知道我能做到這一點!驚人!!! – 2014-07-15 16:23:25

0

這是一個可能的解決方案。如果直接從next()開始,則永遠不會獲得數組的第一個元素。

reset($array1); reset($array2); 
for ($element1 = current($array1), $element2 = current($array2); 
     $element1 !== false && $element2 !== false; 
     $element1 = next($array1), $element2 = next($array2)) { 
    // Do something 

}