2010-03-31 80 views
6

該語言是PHP。我有一個foreach($ a爲$ b)和另一個foreach($ c爲$ d => $ e)。我如何將他們結合在一起閱讀。我厭倦了foreach(($ a爲$ b)& &($ c爲$ d => $ e)),但那是垃圾。如何將兩個foreach循環合併爲一個

回答

0

這將做你想做的事。在整個循環過程中,它將同時推進兩個陣列。您可以隨時break如果手動$c是不同的大小比$a,你需要基於陣列的尺寸打破邏輯:

foreach($a as $b) 
{ 
    list($d,$e) = each($c); 
    //continue on with $b, $d and $e all set 
} 

each()將推進$c數組指針在每次迭代。

3

我不明白你想要做什麼。如果你想在其他以後,以達到他們一個只使用兩個循環:

foreach ($a as $b) { ... } 
foreach ($c as $d => $e) { ... } 

如果從$a$c希望所有的組合:

foreach ($a as $b) { 
    foreach ($c as $d => $e) { 
    // do stuff 
    } 
} 

我想你可以這樣做:

foreach (array_merge($a, $c) as $k => $v) { 
    ... 
} 

但我不一定建議。

22

您可能會感興趣SPL's MultipleIterator

例如

// ArrayIterator is just an example, could be any Iterator. 
$a1 = new ArrayIterator(array(1, 2, 3, 4, 5, 6)); 
$a2 = new ArrayIterator(array(11, 12, 13, 14, 15, 16)); 

$it = new MultipleIterator; 
$it->attachIterator($a1); 
$it->attachIterator($a2); 

foreach($it as $e) { 
    echo $e[0], ' | ', $e[1], "\n"; 
} 

打印

1 | 11 
2 | 12 
3 | 13 
4 | 14 
5 | 15 
6 | 16 
+0

這就是我今天所看到的代碼中最有趣的和平。再加上一個。數組的長度是否相等,或者在某個點上是否停止迭代其中的一個? – 2010-03-31 23:08:40

+3

這取決於您是否設置MultipleIterator :: MIT_NEED_ANY或MultipleIterator :: MIT_NEED_ALL標誌。使用MIT_NEED_ALL時,如果任何內部迭代器沒有更多元素,則迭代器將停止。使用MIT_NEED_ANY時,只要至少有一個內部迭代器具有另一個元素,則所有其他項都將變爲NULL,迭代器就會繼續。 MIT_NEED_ALL是默認值。 – VolkerK 2010-03-31 23:34:42

+1

謝謝你的信息,非常酷! – 2010-03-31 23:48:26

7

1)第一種方法

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

foreach(array_combine($FirstArray, $SecondArray) as $f => $n) { 
    echo $f.$n; 
    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/>"; 
} 
?>