Dans le développement quotidien de PHP, la fonction Array_Diff () est souvent utilisée pour effectuer des opérations différentielles sur les tableaux. Il peut nous aider à trouver des valeurs qui existent dans un tableau mais pas dans d'autres tableaux. Ceci est très pratique dans la gestion des scénarios tels que le filtrage des données et le contrôle de l'autorisation.
Cependant, une question souvent négligée est: Array_Diff () conservera le nom de clé du tableau d'origine lors du retour du résultat? Ou va-t-il réindexer automatiquement le tableau?
Jetons un coup d'œil à un exemple simple:
<?php
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["green", "yellow", "red"];
$result = array_diff($array1, $array2);
print_r($result);
?>
Le résultat de la sortie est:
Array
(
[b] => brown
[c] => blue
)
Comme vous pouvez le voir, le résultat renvoyé par array_diff () conserve le nom de clé du tableau d'origine $ array1 . Même la clé de chaîne n'est pas réindexée.
Si vous souhaitez vraiment réindexer le tableau de résultat, vous pouvez utiliser Array_Values () manuellement:
$reindexed = array_values(array_diff($array1, $array2));
print_r($reindexed);
Sortir:
Array
(
[0] => brown
[1] => blue
)
Dans ce cas, le nom de clé est réinitialisé à un index de numéro continu à partir de 0 .
Supposons que l'utilisateur soumet un ensemble de balises et que vous souhaitez supprimer le contenu qui existe déjà dans la balise par défaut du système:
<?php
$userTags = [
10 => "php",
11 => "html",
12 => "custom"
];
$defaultTags = ["php", "html", "css", "javascript"];
$finalTags = array_diff($userTags, $defaultTags);
print_r($finalTags);
?>
Résultat de sortie:
Array
(
[12] => custom
)
Cela montre que la fonction conserve les noms de clés du tableau d'origine de l'utilisateur, qui peut être des informations précieuses dans les opérations d'insertion de base de données ou de mise à jour.
array_diff () ne compare que des valeurs , quels que soient les noms de clés.
Si vous souhaitez comparer en fonction des noms de clés, vous pouvez utiliser array_diff_key () .
Si vous souhaitez comparer les noms et valeurs de clés en même temps, vous pouvez utiliser array_diff_assoc () .