(PHP) 多次元配列の比較


多次元配列の比較のための関数のメモです。

比較は緩やかな比較(==)をしています。

左辺のキーと値で比較しています。左辺にあるものが右辺にあれば一致するとみなし、右辺にのみあるキーと値は無視します。
左辺にのみ存在する値は差分として表示します。
過不足無く配列の一致を確認する場合は、面倒ですが、左右入れ替えて実行します。

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
)
)
)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

SPAM防止のため数字と漢数字の算数の計算をお願いします。 * Time limit is exhausted. Please reload CAPTCHA.