Maison >développement back-end >Problème PHP >Quelle est la différence entre la comparaison de déduplication PHP Array entre les nombres et les chaînes
La fonction PHP array_unique()
gère différemment les touches numériques et de chaîne dans la façon dont il détermine l'unicité. Lorsqu'il s'agit de valeurs en double, il préserve la clé d'abord rencontrée. Cependant, le type de clé lui-même influence cette préservation.
Illustrons:
array_unique()
conservera l'élément avec la première clé de chaîne. Des éléments suivants avec la même valeur mais différentes clés de chaîne seront supprimées. array_unique()
se comporte de manière similaire. Il conserve l'élément avec la clé numérique la plus basse lors de la rencontre de valeurs en double. Des clés numériques plus élevées associées à la même valeur sont jetées. Considérez ces exemples:
<code class="php">$arr1 = ['a' => 1, 'b' => 2, 'c' => 1, 'd' => 3]; $uniqueArr1 = array_unique($arr1); // $uniqueArr1 will be ['a' => 1, 'b' => 2, 'd' => 3] $arr2 = [1 => 1, 2 => 2, 3 => 1, 4 => 3]; $uniqueArr2 = array_unique($arr2); // $uniqueArr2 will be [1 => 1, 2 => 2, 4 => 3] $arr3 = ['a' => 1, 1 => 1, 'b' => 2, 2 => 2]; $uniqueArr3 = array_unique($arr3); // $uniqueArr3 will likely be ['a' => 1, 'b' => 2] (Order might vary slightly depending on PHP version)</code>
Essentiellement, le type de clé n'a pas d'impact directement ce qui est considéré comme unique (la valeur), mais il dicte qui > la clé est préservée lorsque les Duplicates sont trouvés. La fonction priorise la première occurrence en fonction de l'ordre des clés.
PHP array_unique()
Effectue une comparaison lâche (en utilisant ==
) lors de la vérification des valeurs en double. Cela signifie que le jonglage de type est impliqué. Il ne compare pas strictement les types de données; Au lieu de cela, il vérifie si les valeurs sont considérées comme "égales" après que les règles de coercition de type PHP sont appliquées.
Par exemple:
<code class="php">$arr = [1, "1", 2, "2.0"]; $uniqueArr = array_unique($arr); // $uniqueArr will likely be [1, 2] </code>
Ici, "1" et 1 sont considérées comme égales en raison de la jonglerie de type, et "2.0" est considérée comme égale à 2. Cette comparaison lâche peut conduire à des résultats inattendus si vous ne faites pas attention.
Le principal piège de l'utilisation array_unique()
sur les tableaux avec des types de données mixtes La comparaison lâche est-elle mentionnée plus tôt. Cela peut conduire à une déduplication involontaire en raison d'un jonglerie de type. Vous pourriez perdre des éléments que vous avez l'intention de conserver parce que PHP les considère égaux malgré leurs différents types.
Par exemple, "0" (String) et 0 (entier) seront traités comme les mêmes, ce qui n'aura pas été conservé. De même, "1.0" (String) et 1 (entier) seraient également traités comme égaux. Ce comportement peut être problématique si vous devez maintenir la distinction entre les représentations de chaîne et numériques. La dépendance de la fonction sur la première occurrence peut également conduire à des résultats inattendus en fonction de l'ordre de vos données.
array_unique()
array_unique()
===
SÉRIALISATION: array_unique()
En utilisant un tableau associatif temporaire: Choisir la meilleure stratégie dépend des besoins spécifiques de votre application et de la taille de vos données. Pour les grands ensembles de données, une fonction personnalisée utilisant un algorithme plus efficace peut être préférée à la sérialisation. L'approche temporaire du tableau associatif offre un équilibre entre l'efficacité et la conservation de type.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!