php循环遍历多个数组

时间:2012-02-07 05:38:17

标签: php arrays loops

好的,所以我有两个数组

$array_one([a]=>2,[b]=>1,[c]=>1);
$array_two([a]=>1,[b]=>2,[c]=>1);

我希望能够同时遍历这两个数组,这样我就可以进行简单的比较。我查看了使用foreach循环,但我一次只能处理一个数组的信息。我也考虑过合并数组,但由于我需要键和值来进行比较,所以我无法看到这样做的用法。有没有人有这个问题的解决方案?我很感激你的进步时间。

具体到比较我想要的东西到这个程度

if ($keyone == $keytwo && $valuetwo <= $valueone)
{
   print_r ($array_two);
}

是否可以使用递归来循环而不是使用和迭代循环?

8 个答案:

答案 0 :(得分:19)

$array_one = array (
    'a' => 2,
    'b' => 1,
    'c' => 1
);
$array_two = array (
    'a' => 1,
    'b' => 2,
    'c' => 1
);


$iterator = new MultipleIterator ();
$iterator->attachIterator (new ArrayIterator ($array_one));
$iterator->attachIterator (new ArrayIterator ($array_two));

foreach ($iterator as $item)
{
    if ($item [0] > $item [1])
    {
        ...
    }
}

真的,这有点多余,但我看到它有一定的美感。

答案 1 :(得分:15)

如果它们具有相同的键,您只需循环键并使用它们使用array_keys索引数组:

foreach(array_keys($array_one) as $key) {
    // do something with $array_one[$key] and $array_two[$key]
}

如果您担心某些密钥不存在,可以尝试(例如)array_key_exists($key,$array_two)

答案 2 :(得分:2)

$array_one = array('a'=>2,'b'=>1,'c'=>1); 
$array_two = array('a'=>1,'b'=>2,'c'=>1);
$keys = array_keys($array_one);
for($x=0;$x<sizeof($array_one);$x++){
    if($array_one[$keys[$x]] == $array_two[$keys[$x]]) { 
        echo "equal key:".$keys[$x]."\n";
    }
}

输出:
等于键:c

另一个更好lol。

答案 3 :(得分:2)

您可以轻松地使用foreach。

$array_one([a]=>2,[b]=>1,[c]=>1);
$array_two([a]=>1,[b]=>2,[c]=>1);

foreach($array_one as $array_one_key => $array_one_value) {
    foreach($array_two as $array_two_key => $array_two_value) {
        if ($array_one_key == $array_two_key && $array_two_value <= $array_one_value) {
            print_r ($array_two);
        }
    }
}

答案 4 :(得分:1)

  

我查看了使用foreach循环,但我一次只能处理一个数组的信息。

如果两个数组中的键相同,则可以使用foreach():

foreach($array_one as $key => $value)
{
  // do something to the first array
  $array_one[$key] = doSomething($value);

  // do something else to the second array
  $array_two[$key] = doSomethingElse($array_two[$key]);
}

答案 5 :(得分:1)

/* Make sure the array pointer is in the first position. */
reset($leftarray);
reset($rightarray);

/* Loop through the arrays. */
$i=0;
while ($i < $totalitems)
   {echo current($leftarray)."<br>".
         current($rightarray)."<br>"; 
    next($leftarray);
    next($rightarray);                                                     
    $i=$i+1;
   }

答案 6 :(得分:1)

<?php
foreach($array_one as $k => $v)
{
  $result = $v . $array_two[$k];
}
?>

答案 7 :(得分:1)

可能有更好的方法,但这将遍历两个数组,使用foreach进行array_one和reset,next,并键入array_two。

$array_one = array('a'=>2,'b'=>1,'c'=>1,'x'=>3,'y'=>4);
$array_two = array('a'=>1,'b'=>2,'c'=>1,'d'=>3,'e'=>8);     

$v2 = reset($array_two);
$k2 = key($array_two);

foreach ($array_one as $k1 => $v1) {
    if ($k1 == $k2 && $v1 == $v2 ) {
        echo "$k1 == $k2 && $v1 == $v2\n";
    } elseif ($k1 == $k2) {
        echo "$k1 == $k2 Keys match\n";
    } elseif ($v1 == $v2) {
        echo "$v1 == $v2 Values match\n";
    } else {
        echo "$k1 $v1  $k2 $v2 No match\n";
    }       
    $v2 = next($array_two);
    $k2 = key($array_two);
}