作成日:2023-01-26, 更新日:2023-01-26
独自関数
メソッド: 多重配列に対応させたarray_diff_assoc()
function multiple_array_diff_assoc($ary1, $ary2) {
$fix_many = array();
foreach ( $ary1 as $key1 => $val1 ) {
if ( !array_key_exists($key1, $ary2) ) { // $ary2にキーが無い
$fix_many[$key1] = $val1;
continue;
}
$val2 = $ary2[$key1];
if ( !is_array($val1) && !is_array($val2) ) { // 両方配列じゃない
if ( $val1 != $val2 ) {
$fix_many[$key1] = $val1;
}
continue;
}
elseif ( is_array($val1) && is_array($val2) ) { // 両方配列
// あとでゴニョゴニョするので、ひとまず放置
}
else { // 片方が配列
$fix_many[$key1] = $val1;
continue;
}
$new_diff = multiple_array_diff_assoc($val1, $val2); // 両方配列なので再帰処理
if ( is_array($new_diff) && 0 < count($new_diff) ) {
$fix_many[$key1] = $new_diff;
}
}
return $fix_many;
}
呼出し
$ary1 = array(~ 省略 ~);
$ary2 = array(~ 省略 ~);
$diff1 = multiple_array_diff_assoc($ary1, $ary2);
$diff2 = multiple_array_diff_assoc($ary2, $ary1);
$flg_noDiff = true;
if ( is_array($diff1) && 0 < count($diff1) ) { // 「値が変わった」「$ary1で新たなキーが増えた」の両方
$flg_noDiff = false;
var_dump($diff1);
}
if ( is_array($diff2) && 0 < count($diff2) ) { // 「値が変わった」「$ary2で新たなキーが増えた」の両方
$flg_noDiff = false;
var_dump($diff2);
}
if( $flg_noDiff ) {
echo '変更なし';
}