比较PHP中的multidimensional array

我如何比较php中的multidimensional array? 有一个简单的方法吗?

我知道最简单的方法:

$a == $b; 

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

  1. === ,顺序很重要:

     $a = array(0 => 'a', 1 => 'b'); $b = array(1 => 'b', 0 => 'a'); var_dump($a == $b); // true var_dump($a === $b); // false 
  2. === ,types很重要:

     $a = array(0, 1); $b = array('0', '1'); var_dump($a == $b); // true var_dump($a === $b); // false 

参考: 数组运算符

另一种方法是serialize()两个数组并比较string。

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

 function multi_diff($arr1,$arr2){ $result = array(); foreach ($arr1 as $k=>$v){ if(!isset($arr2[$k])){ $result[$k] = $v; } else { if(is_array($v) && is_array($arr2[$k])){ $diff = multi_diff($v, $arr2[$k]); if(!empty($diff)) $result[$k] = $diff; } } } return $result; } //example: var_dump(multi_diff( array( "A"=>array( "A1"=>array('A1-0','A1-1','A1-2','A1-3'), "A2"=>array('A2-0','A2-1','A2-2','A2-3'), "A3"=>array('A3-0','A3-1','A3-2','A3-3') ), "B"=>array( "B1"=>array('B1-0','B1-1','B1-2','B1-3'), "B2"=>array('B2-0','B2-1','B2-2','B2-3'), "B3"=>array('B3-0','B3-1','B3-2','B3-3') ), "C"=>array( "C1"=>array('C1-0','C1-1','C1-2','C1-3'), "C2"=>array('C2-0','C2-1','C2-2','C2-3'), "C3"=>array('C3-0','C3-1','C3-2','C3-3') ), "D"=>array( "D1"=>array('D1-0','D1-1','D1-2','D1-3'), "D2"=>array('D2-0','D2-1','D2-2','D2-3'), "D3"=>array('D3-0','D3-1','D3-2','D3-3') ) ), array( "A"=>array( "A1"=>array('A1-0','A1-1','A1-2','A1-3'), "A2"=>array('A2-0','A2-1','A2-2','A2-3'), "A3"=>array('A3-0','A3-1','A3-2') ), "B"=>array( "B1"=>array('B1-0','B1-2','B1-3'), "B2"=>array('B2-0','B2-1','B2-2','B2-3'), "B3"=>array('B3-0','B3-1','B3-3') ), "C"=>array( "C1"=>array('C1-0','C1-1','C1-2','C1-3'), "C3"=>array('C3-0','C3-1') ), "D"=>array( "D1"=>array('D1-0','D1-1','D1-2','D1-3'), "D2"=>array('D2-0','D2-1','D2-2','D2-3'), "D3"=>array('D3-0','D3-1','D3-2','D3-3') ) ) )); 

要比较数组的结构,您应该使用身份运算符。

 if($arrayA === $arrayB) { ... } 
 $difference = array(); foreach($array1 as $key => $value) { if(is_array($value)) { if(!isset($array2[$key])) { $difference[$key] = $value; } elseif(!is_array($array2[$key])) { $difference[$key] = $value; } else { $new_diff = array_diff($value, $array2[$key]); if($new_diff != FALSE) { $difference[$key] = $new_diff; } } } elseif(!isset($array2[$key]) || $array2[$key] != $value) { $difference[$key] = $value; } }