多次元配列の比較のための関数のメモです。
比較は緩やかな比較(==)をしています。
左辺のキーと値で比較しています。左辺にあるものが右辺にあれば一致するとみなし、右辺にのみあるキーと値は無視します。
左辺にのみ存在する値は差分として表示します。
過不足無く配列の一致を確認する場合は、面倒ですが、左右入れ替えて実行します。
function diffMultiDemenion($arrrayLeft,$arrayRight){ //左辺の内容が右辺に含まれているか //同一かどうかは左右入れ替えて確認する //差が無ければfalse $diff = false; if (is_array($arrrayLeft)){ foreach($arrrayLeft as $key => $item){ if (is_array($item)){ //配列なら再帰呼び出し $tempDiff = diffMultiDemenion($item,$arrayRight[$key]); if ($tempDiff){ //差が無ければキーを作らない $diff[$key] = $tempDiff; } }else{ if($item != $arrayRight[$key]){ //配列[0]に左辺、[1]に右辺の値 $diff[$key] = array($item,$arrayRight[$key]); } } } }elseif($arrrayLeft != $arrayRight){ //配列でなければそのま比較して異なる場合は右辺と左辺を表示 $diff = array($arrrayLeft,$arrayRight); } return($diff); } 使用例です。 $arrayA['b'] = 1; $arrayA['c'] = 2; $arrayA['a']['d'] = 3; $arrayA['a']['f'] = 4; $arrayB['b'] = 1; $arrayB['c'] = 0; $arrayB['a']['d'] = 3; $arrayB['a']['f'] = 0; $diff = diffMultiDemenion($arrayA,$arrayB); print_r($diff); その結果です。 Array ( [c] => Array ( [0] => 2 [1] => 0 ) [a] => Array ( [f] => Array ( [0] => 4 [1] => 0 ) ) )