作成日: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 '変更なし'; }