2011-04-12 64 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 

}