Dans de nombreuses applications de développement, en particulier dans les fonctions de mise à jour de la base de données et des formulaires, nous devons souvent effectuer une détection de «champs récemment modifiés». Autrement dit, les développeurs doivent comparer deux tableaux et identifier les champs ont changé. PHP fournit des fonctions intégrées puissantes pour réaliser cette exigence, dont l'une est Array_Diff_uassoc .
La fonction Array_Diff_uassoc peut non seulement être utilisée pour comparer les valeurs de deux tableaux, mais peut également être traitée en fonction des règles de comparaison personnalisées. Ci-dessous, nous montrerons comment utiliser Array_Diff_uassoc pour détecter si le champ a changé dans un scénario d'application pratique.
Avant d'expliquer comment utiliser array_diff_uassoc , comprenons brièvement comment cela fonctionne. array_diff_uassoc est utilisé pour calculer la différence entre deux tableaux, similaires à array_diff_assoc , mais il vous permet de définir comment les clés et les valeurs sont comparées via une fonction de rappel.
Définition de la fonction:
array_diff_uassoc ( array $array1 , array $array2 , callable $value_compare_func ) : array
$ array1 : le premier tableau.
$ array2 : le deuxième tableau.
$ value_compare_func : une fonction de rappel utilisée pour comparer les éléments du tableau. La fonction doit accepter deux paramètres, renvoyer une valeur entière et déterminer la relation entre les deux valeurs (égale à 0, la première est supérieure à la seconde est une valeur positive, et la seconde est supérieure à la première est une valeur négative).
Supposons que nous ayons un formulaire d'informations utilisateur qui met à jour les informations utilisateur via l'interface Web. Dans ce processus, nous devons savoir quels champs ont été modifiés.
Nous avons deux tableaux représentant les informations de l'utilisateur avant et après avoir soumis le formulaire:
// Données brutes:Informations avant la soumission
$oldData = [
'name' => 'John Doe',
'email' => 'johndoe@m66.net',
'age' => 25,
'address' => '123 Main Street'
];
// Données après la soumission:Informations modifiées par l'utilisateur
$newData = [
'name' => 'John Doe',
'email' => 'johndoe@m66.net',
'age' => 26, // Modifié
'address' => '123 Main Street'
];
Notre objectif est de détecter quels champs de $ newdata ont changé par rapport à $ olddata . Dans ce scénario, le champ de messagerie ne change pas, mais le champ d'âge change.
// Définir une fonction de rappel de comparaison
function customCompare($a, $b) {
return strcmp($a, $b);
}
// utiliserarray_diff_uassocDétecter les différences
$changedFields = array_diff_uassoc($newData, $oldData, 'customCompare');
// 输出Modifié的字段
print_r($changedFields);
Dans cet exemple, la fonction CustomCompare utilise STRCMP pour comparer deux chaînes (ou d'autres types de données), et renvoie 0 s'il est égal, indiquant que la valeur de champ n'a pas changé. Si la valeur de retour n'est pas 0, cela signifie que le champ a changé.
Array
(
[age] => 26
)
Comme illustré ci-dessus, le tableau de champs Sortie $ SOGMAGE ne contient que le champ d'âge , qui est le seul champ qui a été modifié.
La fonction Array_Diff_uassoc est très utile dans la détection des changements de champ. En comparant les paires de valeurs clés de deux tableaux, il peut identifier avec précision quels champs ont changé. En combinant des fonctions de rappel de comparaison personnalisées, vous pouvez obtenir une détection de différence flexible et efficace dans une variété de scénarios.
Voici un exemple de code complet montrant comment détecter les "champs récemment modifiés" en utilisant array_diff_uassoc :
<?php
// Données brutes:Informations avant la soumission
$oldData = [
'name' => 'John Doe',
'email' => 'johndoe@m66.net',
'age' => 25,
'address' => '123 Main Street'
];
// Données après la soumission:Informations modifiées par l'utilisateur
$newData = [
'name' => 'John Doe',
'email' => 'johndoe@m66.net',
'age' => 26, // Modifié
'address' => '123 Main Street'
];
// Définir une fonction de rappel de comparaison
function customCompare($a, $b) {
return strcmp($a, $b);
}
// utiliserarray_diff_uassocDétecter les différences
$changedFields = array_diff_uassoc($newData, $oldData, 'customCompare');
// 输出Modifié的字段
print_r($changedFields);
?>