2010-03-31 163 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/>"; 
} 
?>