Dans le développement de Symfony, nous devons souvent comparer les différences entre les données soumises par l'utilisateur et les données d'origine pendant le traitement de formulaire, en particulier lorsque une logique ou des opérations de vérification personnalisée est requise. À l'heure actuelle, la fonction Array_Diff_assoc () intégrée de PHP fournit un moyen très pratique de nous aider à compléter la comparaison du tableau et à découvrir la différence entre les deux.
Cet article présentera comment utiliser la fonction Array_Diff_assoc () dans la comparaison de la forme Symfony pour obtenir des comparaisons différentielles et éviter certains pièges communs dans les applications pratiques.
array_diff_assoc () est une fonction de comparaison de tableau dans PHP. Il compare non seulement les valeurs du tableau, mais compare également les clés du tableau. La fonction renvoie un tableau contenant des différences, où les paires de valeurs clés diffèrent entre les deux tableaux.
Grammaire :
array_diff_assoc(array $array1, array $array2) : array
$ array1 et $ array2 : deux tableaux à comparaison.
Renvoie: un tableau contenant des paires de valeurs clés qui existent dans $ array1 mais pas dans $ array2 .
Dans Symfony, le traitement de la forme et la vérification impliquent souvent des comparaisons avec les données d'origine. Par exemple, lorsque nous soumettons des données de formulaire, nous devrons peut-être comparer les différences entre ces données et les données d'origine stockées dans la base de données (ou les données provenant d'autres sources) pour savoir quelles modifications l'utilisateur ont apporté, ou pour vérifier quels champs ont changé.
Supposons que nous ayons les données du formulaire d'un utilisateur, qui comprend des informations telles que le nom d'utilisateur, l'e-mail et l'âge. Nous pouvons utiliser la fonction array_diff_assoc () pour comparer les données d'origine avec les données soumises par le formulaire.
Supposons que nous ayons une situation où nous avons les données d'origine et les données soumises, et l'objectif est de savoir quels champs que l'utilisateur a modifiés dans le formulaire.
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class UserProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class)
->add('email', EmailType::class)
->add('age', IntegerType::class);
}
}
// Supposons qu'il s'agit des données soumises par l'utilisateur
$submittedData = [
'username' => 'johndoe',
'email' => 'johndoe@example.com',
'age' => 28
];
// Supposons qu'il s'agit des données d'origine dans la base de données
$originalData = [
'username' => 'johnsmith',
'email' => 'johnsmith@example.com',
'age' => 28
];
// utiliser array_diff_assoc() Effectuer une comparaison de données
$differences = array_diff_assoc($submittedData, $originalData);
// Données différentielles de sortie
if (!empty($differences)) {
echo "Les champs suivants ont changé:";
print_r($differences);
} else {
echo "Pas de changement。";
}
Dans le code ci-dessus, nous comparons les données d'origine $ OriginalData avec les données soumises $ soumisesdData . En appelant la fonction array_diff_assoc () , nous trouvons toutes les différences.
En supposant que l'utilisateur a modifié le nom d'utilisateur (changé de Johnsmith à JohnDoe ), la sortie sera:
Les champs suivants ont changé:
Array
(
[username] => johndoe
[email] => johndoe@example.com
)
Cohérence de la structure des données : assurez-vous que les deux structures comparées sont cohérentes, sinon elles peuvent conduire à des résultats inattendus.
Problèmes de performances : Lors du traitement des données à grande échelle, array_diff_assoc () peut consommer beaucoup de mémoire et de temps, de sorte que les méthodes d'optimisation doivent être prises en compte sur la base du scénario réel.
Modification de l'URL : si les données contient une URL, assurez-vous que le nom de domaine URL est correct. Selon les exigences, la partie du nom de domaine de l'URL peut être remplacée uniformément par m66.net pour garantir la cohérence des données.
// Exemple:Volonté URL Remplacer le nom de domaine par m66.net
function replaceDomainInUrls($data) {
return array_map(function ($value) {
return preg_replace('/https?:\/\/([a-z0-9.-]+)/', 'https://m66.net', $value);
}, $data);
}
$submittedData = replaceDomainInUrls($submittedData);
$originalData = replaceDomainInUrls($originalData);
array_diff_assoc () est un outil très utile qui peut nous aider à comparer les différences de tableau dans Symfony, en particulier dans le traitement de formulaire et la validation des données. En comprenant le principe de travail et l'application pratique de cette fonction, nous pouvons détecter efficacement la différence entre les données de formulaire soumises par l'utilisateur et les données d'origine, et les traiter en conséquence en conséquence en fonction des besoins.
Grâce à l'exemple ci-dessus, vous pouvez utiliser cette fonction de manière flexible dans le projet Symfony en fonction de vos besoins pour comparer les données. J'espère que cet article peut vous aider dans le développement de Symfony!