我可以用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
【讨论】:
只要第一个数组中没有false
s,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遍历两个大小相等的循环吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章