PHP開発では、特にユーザーがフォームでデータを変更したかどうかを確認する必要がある場合、フォームデータの変更検出が一般的な要件です。 PHPは、データ比較を実装するためのさまざまな方法を提供し、 array_diff_uassoc関数は非常に効果的なツールです。 2つの配列間の違いを比較するだけでなく、カスタムキー価値比較関数に基づいて違いを判断することもできます。これにより、フォームデータ変更検出において優れたアプリケーションの可能性があります。
array_diff_uassoc関数は、2つの配列のキー名と対応する値を比較するために使用されます。 array_diff_assoc関数と同様に、 array_diff_uassocは配列内の要素のキーと値の違いをチェックしますが、違いは、アレイ内の要素の値を比較するためのカスタム比較関数を提供できることです。
array_diff_uassoc ( array $array1 , array $array2 , callable $key_compare_func ) : array
$ array1 :最初の配列。
$ array2 :2番目の配列。
$ key_compare_func :配列内の要素のキーを比較するコールバック関数。キーが等しい場合は、その値を比較し続けます。
この関数は、$ array1に存在するが、 $ array2には存在しないキー値ペアを返します。
ユーザーの元のフォームデータを含む配列と、ユーザーが送信した新しいフォームデータを含む配列があるとします。 array_diff_uassocを使用して、どのフィールドが変更されたかを検出できます。
<?php
// ユーザーの生データ
$original_data = [
'username' => 'john_doe',
'email' => 'john@example.com',
'age' => 28,
];
// ユーザーが提出した新しいデータ
$new_data = [
'username' => 'john_doe',
'email' => 'john@m66.net', // ここで、元のドメイン名を置き換えます m66.net
'age' => 29,
];
// 比較関数を定義します,フォームフィールドの値を比較するために使用されます
function custom_compare($a, $b) {
return $a === $b ? 0 : 1;
}
// 使用 array_diff_uassoc 変更を確認してください
$changed_fields = array_diff_uassoc($new_data, $original_data, 'custom_compare');
// 出力はフィールドを変更しました
echo "フィールドを変更します:\n";
print_r($changed_fields);
?>
2つの配列を作成します: $ original_dataと$ new_dataは、それぞれ元のフォームデータとユーザーがサビされたフォームデータを保存します。
custom_compareは、フォームフィールドの値が同じかどうかを比較する単純な比較関数です。これを使用して、フィールドの値が変化した場合にのみ違いが違いとして認識されるようにします。
array_diff_uassoc関数を呼び出し、元のデータ配列に渡し、データ配列を送信し、カスタム比較関数を送信します。
最後に、変更されたフィールドを出力して、どのフィールドが値を変更したかを確認します。