Position actuelle: Accueil> Derniers articles> Array_Diff_assoc Tutoriel pratique: comment détecter les champs modifiés sous forme d'utilisateur?

Array_Diff_assoc Tutoriel pratique: comment détecter les champs modifiés sous forme d'utilisateur?

gitbox 2025-07-26

Dans le développement Web, lorsque les utilisateurs soumettent des formulaires, ils doivent souvent comparer les données soumises avec les données d'origine, en particulier dans le scénario de modification des informations utilisateur. Par exemple, l'utilisateur a modifié ses informations personnelles et nous voulons détecter quels champs ont été modifiés. La fonction Array_Diff_assoc () fournie par PHP peut nous aider à terminer facilement cette tâche. Aujourd'hui, nous apprendrons à utiliser cette fonction pour détecter les champs modifiés sous une forme à travers un cas pratique.

1. Quelle est la fonction array_diff_assoc () ?

La fonction array_diff_assoc () est utilisée pour calculer la différence entre deux tableaux, en fonction de la comparaison des noms de clés et des valeurs de clés. Il renvoie un élément contenu dans le premier tableau mais pas dans le deuxième tableau. Il convient de noter qu'il compare non seulement les valeurs du tableau, mais compare également les noms de clés du tableau, il est donc plus strict que Array_Diff () .

Prototype de fonction:

 <span><span><span class="hljs-title function_ invoke__">array_diff_assoc</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1 : le premier tableau.

  • $ array2 : le deuxième tableau.

  • Valeur de retour: un tableau contenant tous les éléments de $ array1 qui sont différents de $ array2 .

2. Scénarios d'application pratiques

Supposons que nous ayons un formulaire où les utilisateurs modifient les informations, et les informations soumises par l'utilisateur comprennent des champs tels que le nom, le courrier électronique, le numéro de téléphone, etc. Nous espérons comparer les données utilisateur d'origine avec les données de formulaire soumises pour détecter quels champs ont été modifiés.

3. Exemple de code

Étape 1: Définissez les données d'origine et les données soumises par l'utilisateur

Tout d'abord, définissez un tableau contenant les données d'origine de l'utilisateur et un tableau contenant les données soumises par l'utilisateur.

 <span><span><span class="hljs-comment">// Supposons qu&#39;il s&#39;agit des informations utilisateur d&#39;origine stockées dans la base de données</span></span><span>
</span><span><span class="hljs-variable">$original_data</span></span><span> = [
    </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'John Doe'</span></span><span>,
    </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'[email protected]'</span></span><span>,
    </span><span><span class="hljs-string">'phone'</span></span><span> =&gt; </span><span><span class="hljs-string">'123-456-7890'</span></span><span>
];

</span><span><span class="hljs-comment">// Supposons qu&#39;il s&#39;agit des données de formulaire modifiées soumises par l&#39;utilisateur</span></span><span>
</span><span><span class="hljs-variable">$submitted_data</span></span><span> = [
    </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'John Doe'</span></span><span>,  </span><span><span class="hljs-comment">// Le nom n&#39;a pas été modifié</span></span><span>
    </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'[email protected]'</span></span><span>,  </span><span><span class="hljs-comment">// L&#39;adresse e-mail a été modifiée</span></span><span>
    </span><span><span class="hljs-string">'phone'</span></span><span> =&gt; </span><span><span class="hljs-string">'123-456-7890'</span></span><span>  </span><span><span class="hljs-comment">// Le numéro de téléphone n&#39;a pas été modifié</span></span><span>
];
</span></span>

Étape 2: Utilisez array_diff_assoc () pour comparer les données

Ensuite, utilisez array_diff_assoc () pour comparer les données d'origine et les données soumises pour savoir quels champs ont été modifiés.

 <span><span><span class="hljs-comment">// utiliser array_diff_assoc Trouver les champs modifiés</span></span><span>
</span><span><span class="hljs-variable">$changed_fields</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff_assoc</span></span><span>(</span><span><span class="hljs-variable">$submitted_data</span></span><span>, </span><span><span class="hljs-variable">$original_data</span></span><span>);

</span><span><span class="hljs-comment">// Sortie des champs modifiés</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$changed_fields</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les champs modifiés sont:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$changed_fields</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$key</span></span></span><span>: </span><span><span class="hljs-subst">$value</span></span><span>\n";
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aucun champ n&#39;est modifié。\n"</span></span><span>;
}
</span></span>

Résultat de sortie:

 <span><span>Les champs modifiés sont:
</span><span><span class="hljs-symbol">email</span></span><span><span class="hljs-punctuation">:</span></span><span> john.doe</span><span><span class="hljs-meta">@newdomain</span></span><span>.com
</span></span>

4. Explication

  • Dans cet exemple, Array_Diff_assoc () compare les clés et les valeurs des tableaux soumis_data et original_data .

  • Étant donné que le nom et le numéro de téléphone n'ont pas changé, seul le champ de boîte aux lettres est considéré comme différent, donc les résultats de sortie montrent que le champ de messagerie a été modifié.

5. Optimisation: détecter si l'utilisateur a soumis une modification

Supposons qu'en plus de détecter les champs modifiés, nous voulons également savoir si l'utilisateur a soumis une modification du formulaire. Si certains champs n'existent pas dans les données d'origine mais dans les données soumises, elles peuvent être jugées par la combinaison de array_diff_assoc () et array_diff_key () .

 <span><span><span class="hljs-comment">// utiliser array_diff_key Pour détecter si l&#39;utilisateur a soumis un nouveau champ</span></span><span>
</span><span><span class="hljs-variable">$new_fields</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff_key</span></span><span>(</span><span><span class="hljs-variable">$submitted_data</span></span><span>, </span><span><span class="hljs-variable">$original_data</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$new_fields</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Nouveaux champs soumis:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$new_fields</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$key</span></span></span><span>: </span><span><span class="hljs-subst">$value</span></span><span>\n";
    }
}
</span></span>

6. Résumé

array_diff_assoc () est une fonction très pratique qui peut nous aider à détecter facilement les champs modifiés dans le formulaire soumis par l'utilisateur. Dans le développement réel, cette fonction est souvent utilisée dans des scénarios tels que la modification des données des utilisateurs et la modification des commandes pour nous assurer que nous pouvons suivre avec précision les changements.

Avec les exemples ci-dessus, vous pouvez rapidement implémenter la fonction de comparaison des données brutes avec les données soumises par l'utilisateur, vous aidant à mieux gérer la saisie des utilisateurs et la vérification du formulaire.