比较PHP中的多维数组

Kev*_*vin 17 php arrays compare multidimensional-array

如何在php中比较多维数组?有一个简单的方法吗?

Nul*_*ion 36

我知道的最简单的方法:

$a == $b;
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以使用===.他们之间的区别是:

  1. 有了==,订单很重要:

    $a = array(0 => 'a', 1 => 'b');
    $b = array(1 => 'b', 0 => 'a');
    var_dump($a == $b);  // true
    var_dump($a === $b); // false
    
    Run Code Online (Sandbox Code Playgroud)
  2. ===,类型重要:

    $a = array(0, 1);
    $b = array('0', '1');
    var_dump($a == $b);  // true
    var_dump($a === $b); // false
    
    Run Code Online (Sandbox Code Playgroud)

参考:数组运算符

  • @DanMan 如果 `array(0, 1) == array(1, 0)` 为真,那没有多大意义,是吗? (2认同)

use*_*841 12

另一种方法是对serialize()两个数组进行比较并比较字符串.

http://php.net/manual/en/function.serialize.php

  • 注意序列化的数组顺序。serialize(['a'=>'foo','b'=>'bar'])!= serialize(['b'=>'bar','a'=>'foo'])` (2认同)

Kar*_*eem 5

此功能将为您完成所有工作。

您可以使用它来真正比较具有相同或完全不同结构的任何2 个数组

它将返回:

array1中的值不在array2 中 (更多)

array2中的值不在array1 中 (更少)

array1 和 array2 中的值但不同 (差异)

//results for array1 (when it is in more, it is in array1 and not in array2. same for less)
function compare_multi_Arrays($array1, $array2){
    $result = array("more"=>array(),"less"=>array(),"diff"=>array());
    foreach($array1 as $k => $v) {
      if(is_array($v) && isset($array2[$k]) && is_array($array2[$k])){
        $sub_result = compare_multi_Arrays($v, $array2[$k]);
        //merge results
        foreach(array_keys($sub_result) as $key){
          if(!empty($sub_result[$key])){
            $result[$key] = array_merge_recursive($result[$key],array($k => $sub_result[$key]));
          }
        }
      }else{
        if(isset($array2[$k])){
          if($v !== $array2[$k]){
            $result["diff"][$k] = array("from"=>$v,"to"=>$array2[$k]);
          }
        }else{
          $result["more"][$k] = $v;
        }
      }
    }
    foreach($array2 as $k => $v) {
        if(!isset($array1[$k])){
            $result["less"][$k] = $v;
        }
    }
    return $result;
}
Run Code Online (Sandbox Code Playgroud)