【问题标题】:php looping through multiple arrays [duplicate]php循环遍历多个数组[重复]
【发布时间】:2012-02-28 14:23:17
【问题描述】:

好的,所以我有两个数组

$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);
}

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

【问题讨论】:

  • 你想如何使用这个比较?

标签: php arrays loops


【解决方案1】:
$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])
    {
        ...
    }
}

确实有点多余,但我从中看到了某种美。

【讨论】:

  • 这……太美了……
  • 我真的很喜欢 SPL 迭代器的强大功能。这在函数式编程中称为“zip”。我希望在 PHP 的未来有更多很棒的迭代器和实用程序。
  • 我喜欢这个代码色情方面。
【解决方案2】:

如果它们具有相同的键,您可以遍历这些键并使用它们来索引数组,使用 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)

【讨论】:

  • 应该是foreach,而不是for。
【解决方案3】:
$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

另一个更好哈哈。

【讨论】:

    【解决方案4】:

    您可以使用 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);
            }
        }
    }
    

    【讨论】:

    • 这会输出 $array_two 三次
    【解决方案5】:

    我研究过使用 foreach 循环,但我一次只能处理一个数组的信息。

    如果两个数组的key相同,可以使用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]);
    }
    

    【讨论】:

      【解决方案6】:
      /* 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;
         }
      

      【讨论】:

        【解决方案7】:
        <?php
        foreach($array_one as $k => $v)
        {
          $result = $v . $array_two[$k];
        }
        ?>
        

        【讨论】:

          【解决方案8】:

          可能有更好的方法,但这将遍历两个数组,对 array_one 使用 foreach,对 array_two 使用 reset、next 和 key。

          $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);
          }
          

          【讨论】:

            猜你喜欢
            • 2016-08-24
            • 2019-07-10
            • 2017-09-12
            • 2012-04-21
            • 2011-01-02
            • 2016-02-16
            • 2021-09-17
            • 1970-01-01
            相关资源
            最近更新 更多