概要
ユーザがあるフォームからユーザ情報を変更したとする。
「どの項目が変更されたのだろう?」 というのを簡単に知る方法はないかというところで array_diff_assoc を使った小ネタです。
例えばユーザ情報の所属が 開発部
から プロダクト部
に変更されたとすると、
所属
の項目が変わったのだな、と知ることができる。
コード
$before = ['ユーザ名' => 'yamotuki', '会社名' => 'M&Aクラウド', '所属' => '開発部'];
$after = ['ユーザ名' => 'yamotuki', '会社名' => 'M&Aクラウド', '所属' => 'プロダクト部'];
$changedBeforeList = array_diff_assoc($after, $before);
$changedAfterList = array_diff_assoc($before, $after);
$beforeAndAfterDiff = [];
foreach ($changedBeforeList as $key => $value) {
$beforeAndAfterDiff[$key] = $changedBeforeList[$key] . ' => ' . $changedAfterList[$key];
}
var_dump($beforeAndAfterDiff);
出力
array(1) {
["所属"]=>
string(31) "プロダクト部 => 開発部"
}
補足
公式ドキュメントによると、
array_diff_assoc — 追加された添字の確認を含めて配列の差を計算する
assoc は wikipedia によれば associative の略です。
連想配列 連想配列(れんそうはいれつ、英語: associative array)