如何比较 PHP 中常见项目的 2 个数组



我正在编写一个脚本来比较游戏中一个玩家与另一个玩家的成就。在每个数组中,id 和时间戳将在某些条目上匹配。我包含了 2 个独立数组的开头之一的示例:

Array
(
    [0] => Array
        (
            [id] => 8213
            [timestamp] => 1384420404000
            [url] => http://www.wowhead.com/achievement=8213&who=Azramon&when=1384420404000
            [name] => Friends In Places Higher Yet
        )
    [1] => Array
        (
            [id] => 6460
            [timestamp] => 1384156380000
            [url] => http://www.wowhead.com/achievement=6460&who=Azramon&when=1384156380000
            [name] => Hydrophobia
        )

我想找到 id 和时间戳匹配的所有数组项。我已经调查了array_intersect但我认为这不是我正在寻找的,因为它只会在条目相同时找到项目。任何帮助非常感谢。

您可以使用

array_intersect_assoc函数。

尝试这样的事情:

<?php
   $key_match = Array();
   //Loop first array
   foreach($array as $key => $element){
      //Compare to second array 
      if($element == $array2[$key]){
          //Store matching keys
          $key_match[] = $key;
      }
   }
?>

$key_match 将是一个包含所有匹配键的数组。

(我在工作,没有时间测试代码)

希望对你有帮助

编辑:下面是完全工作的示例:

<?php
$a1["t"] = "123";
$a1["b"] = "124";
$a1["3"] = "125";
$a2["t"] = "123";
$a2["b"] = "124";
$a2["3"] = "115";
$key_match = Array();
    //Loop first array
    foreach($a1 as $key => $element){
        //Compare to second array 
        if($element == $a2[$key]){
           //Store matching keys
           $key_match[] = $key;
   }
}
var_dump($key_match);
?>

如果你想继续探索数组回调函数,看看array_uintersect。 这就像array_intersect只是您指定了一个用于比较的函数。 这意味着您可以编写自己的代码。

不幸的是,您需要实现一个基于小于、等于、大于返回 -1、0 或 1 的函数,因此您需要更多代码。 但我怀疑这将是完成您正在寻找的事情的最有效方式。

function compareArrays( $compareArray1, $compareArray2 ) {
    if ( $compareArray1['id'] == $compareArray2['id'] && $compareArray1['timestamp'] == $compareArray2['timestamp'] ) {
        return 0;
    }
    if ( $compareArray1['id'] < $compareArray2['id']  ) {
        return -1;
    }
    if ( $compareArray1['id'] > $compareArray2['id']  ) {
        return 1;
    }
    if ( $compareArray1['timestamp'] < $compareArray2['timestamp']  ) {
        return -1;
    }
    if ( $compareArray1['timestamp'] > $compareArray2['timestamp']  ) {
        return 1;
    }
}
var_dump( array_uintersect( $array1, $array2, "compareArrays") );

相关内容

  • 没有找到相关文章

最新更新