比较PHP中的multidimensional array
我如何比较php中的multidimensional array? 有一个简单的方法吗?
我知道最简单的方法:
$a == $b;
请注意,您也可以使用===
。 他们之间的区别是:
-
用
===
,顺序很重要:$a = array(0 => 'a', 1 => 'b'); $b = array(1 => 'b', 0 => 'a'); var_dump($a == $b); // true var_dump($a === $b); // false
-
用
===
,types很重要:$a = array(0, 1); $b = array('0', '1'); var_dump($a == $b); // true var_dump($a === $b); // false
参考: 数组运算符
另一种方法是serialize()
两个数组并比较string。
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; } }