我可以用foreach遍历两个大小相等的循环吗? [复制]

Posted

技术标签:

【中文标题】我可以用foreach遍历两个大小相等的循环吗? [复制]【英文标题】:Can I iterate through two loops of equal size with foreach? [duplicate] 【发布时间】:2011-08-04 05:44:25 【问题描述】:

我是 php 新手。我有两个大小相等的数组$array1$array2。我一直在使用foreach 循环来遍历数组,如下所示:

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

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

但现在我想同时遍历两个数组,这样我就可以访问循环体中的$element1$element2

我该怎么做?

【问题讨论】:

第一个数组中的 keys 是否与第二个数组中的相同?这个细节将决定答案。 太棒了,这让这一切变得简单。 【参考方案1】:

这是一个可能的解决方案。如果你直接从 next() 开始,你永远不会得到数组的第一个元素。

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


【讨论】:

【参考方案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";

要完全遍历两个数组,请使用 ||而不是 &&。

【讨论】:

...我什至不知道我能做到这一点!太棒了!!!【参考方案3】:
while (($element1 = next($array1)) !== false) 
  $element2 = next($array2);
  // Do something

但如果false$array1 中的允许值,它将失败。如果(在这种情况下)false 不允许在 $array2 中使用,则可以交换两者

“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

【讨论】:

只要第一个数组中没有 falses,next 技巧就会起作用。 是的,我知道,但我没有找到解决方案(不是那么复杂)。但是,我添加了另外两种方式,至少一种应该适合 :) 第三种方式对我来说感觉很好,但它也有其局限性。【参考方案4】:

怎么样

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

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


您显然希望将 $stuff_this_array 和 $stuff_from_other_array 放入更持久的东西中,但也许这会给您一个想法。

【讨论】:

当数组没有数字顺序键时会中断。【参考方案5】:

改用 for 循环...

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

如果数组的索引是数字的并且两个数组的索引相同,这将起作用

【讨论】:

仅适用于数值数组。 这不是 foreach 循环...问题Can I iterate through two loops of equal size with foreach?但是,它适用于 nums 作为键 :) @Wh1T3h4Ck5,在 PHP 中迭代数组的方法比给猫剥皮的方法更多。所有这些都可以适用于特定情况。

以上是关于我可以用foreach遍历两个大小相等的循环吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java怎样用foreach遍历字符串数组?

HashTable中的元素可以用for循环去遍历吗?

foreach能遍历啥

foreach语句遍历数组

c#用foreach遍历数组、列表时是直接获得数据元素,而foreach哈希表时,为啥获得的是命名空间名??

php foreach数组问题