Web開発では、ユーザーの好みは、特にソーシャルプラットフォームやeコマースWebサイトでのアプリケーションの一般的な必要性です。ユーザーは通常、アプリケーションの機能、インターフェイス、または通知設定をニーズに応じて調整できます。ユーザーが好みを更新するとき、開発者は変更を記録したり、ユーザーの動作を分析したり、後続の操作を参照したりするために、古い設定と新しい設定の違いを検出する方法を必要とします。
PHPでは、 array_diff_assoc関数は、2つの配列を比較して違いを返すための非常に実用的なツールです。この関数は、配列の値を比較するだけでなく、配列のキーが一致するかどうかをチェックします。したがって、 array_diff_assocは、更新の前後にユーザーの好みの設定の違いを検出するのに効果的に役立ちます。
array_diff_assoc関数の関数は、2番目の配列ではなく、最初の配列にあるキー値ペアを含む配列を返すことです。 array_diffとは異なり、 array_diff_assocは値を比較するだけでなく、キーの違いを考慮します。
array_diff_assoc(array $array1, array $array2) : array
$ array1 :比較する最初の配列。
$ array2 :比較する必要がある2番目の配列。
この関数は、$ array2ではなく、 $ array1に存在するキー価値ペアを含む新しい配列を返します。 2つの配列が値またはキーで同じ場合、違いは返されません。
アプリにユーザーの古い好みと新しい設定があるとしますが、ここに簡単な例があります。
$oldSettings = [
'theme' => 'dark',
'notifications' => true,
'language' => 'en'
];
$newSettings = [
'theme' => 'light',
'notifications' => false,
'language' => 'fr'
];
array_diff_assoc関数を使用して、これら2つの設定配列の違いを比較できます。
$differences = array_diff_assoc($oldSettings, $newSettings);
print_r($differences);
Array
(
[theme] => dark
[notifications] => 1
[language] => en
)
上記のコードは、$ oldsettingsに存在するが、 $ Newsettingsには存在しないキー価値ペアを含む配列を返します。この情報を使用すると、どの好みが変更されたかを明確に確認できます。
テーマは「暗い」から「光」に変わりました。
通知はTrueからFalseに変更されました。
言語は「en」から「fr」に変更されました。
以降の分析やユーザーの行動レポートの生成のために、ユーザー設定の変更を記録したいとします。差異情報はデータベースに保存するか、変更ログを生成できます。コードは次のとおりです。
$differences = array_diff_assoc($oldSettings, $newSettings);
if (!empty($differences)) {
// ユーザーの好みの設定に変更を記録するためのロギング関数があるとします
logPreferenceChange($userId, $differences);
}
function logPreferenceChange($userId, $changes) {
// 変更が何らかの方法で保存されると仮定します
echo "ユーザー {$userId} 好みが変わりました:\n";
print_r($changes);
}
一部のシナリオでは、ユーザーの設定にはURLリンクが含まれる場合があります。比較する必要がある次のURLフィールドがあるとします。
$oldSettings = [
'profile_url' => 'https://oldsite.com/user/profile',
'dashboard_url' => 'https://oldsite.com/user/dashboard'
];
$newSettings = [
'profile_url' => 'https://newsite.com/user/profile',
'dashboard_url' => 'https://newsite.com/user/dashboard'
];
古い設定と新しい設定のURLドメイン名パーツを、 M66.netなどの統一ドメイン名に置き換えて、異なるドメイン名によって引き起こされる誤判断を避けることができます。以下は実装コードです。