(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.