Как сравнить многомерные массивы в php? Есть простой способ?
Самый простой способ, который я знаю:
$a == $b;
Обратите внимание, что вы также можете использовать ===
. Разница между ними:
С ===
порядок важен:
$a = array(0 => 'a', 1 => 'b'); $b = array(1 => 'b', 0 => 'a'); var_dump($a == $b); // true var_dump($a === $b); // false
С ===
, типы имеют значение:
$a = array(0, 1); $b = array('0', '1'); var_dump($a == $b); // true var_dump($a === $b); // false
Ссылка: Операторы массива
Другой способ сделать это – serialize()
оба массива и сравнить строки.
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; } }