7
votes

Quelles sont les différences pratiques entre les tableaux «associés» et «indexés» dans PHP?

Le type de tableau PHP est effectivement plus proche d'une carte ordonnée qu'un tableau C traditionnel. C'est la structure de données d'utilisation générale d'origine d'origine de PHP. Le manuel va aussi loin pour dire Les types de matrices indexés et associatifs sont les mêmes Tapez PHP, qui peut tous deux contenir des indices entier et de chaîne .

Cependant, de nombreux cas où des caractéristiques de langue intégrées feront une distinction entre les tableaux "indexés" (tableaux avec des tableaux séquentiels, des clés entier) et des tableaux "associatifs" (tableaux avec des clés non séquentielles et / ou des touches de mélange types).

Un exemple de ceci est le fonction Array_Merge .

Si les tableaux d'entrée ont les mêmes clés de chaîne, la valeur ultérieure de cette touche écrasera la précédente. Si, toutefois, les tableaux contiennent des touches numériques, la valeur ultérieure ne remplacera pas la valeur d'origine, mais sera annexée.

Si un seul tableau est donné et que la matrice est indexée numériquement, les touches sont réindexées de manière continue.

Quels sont les autres endroits dans PHP où une distinction est faite entre les tableaux indexés et associatifs? Je suis spécifiquement intéressé par les différences d'UseLland, bien que tout aperçu de la mise en œuvre de la matrice dans la source de PHP soit également intéressant.


0 commentaires

5 Réponses :


0
votes

À peu près toutes les fonctions de tri de base (avec tous les trier , ksort , asort variations selon que vous souhaitez conserver la clé Association et ainsi de suite).


0 commentaires

3
votes

Le plus répandu que cela vient à l'esprit est qu'un matrice indexé peut être bouclé à l'aide d'un traditionnel boucle, alors qu'un associatif ne peut pas (car il ne dispose pas des index numériques): < Pré> xxx

bien sûr, PHP dispose également d'un mot-clé de , qui fonctionne la même sur les deux types.


2 commentaires

+1 Pour de bonnes informations, il convient de noter que vous pouvez faire boucle sur une matrice indexée et une matrice associée à l'aide de la fonction suivante (). En d'autres termes, des tableaux associatifs ont toujours un concept interne d'ordre.


True, et le long de ces lignes, une matrice indexée n'a pas nécessairement l'ordre attendu - plutôt, l'ordre de la matrice utilise (avec foreach ou suivant () , esprit Vous) dépend de l'ordre duquel il était peuplé, alors si $ arrête [3] a été défini avant $ Arr [2], cet ordre sera conservé lors de l'itéraité.



5
votes

En réalité, n'importe quel tableau, peu importe si elle est indexée ou associative, est une haquetable (plus une liste doublement liée pour maintenir l'ordre des éléments) dans PHP. Cependant, dans le code PHP Userland, des tableaux indexés et associatifs servent presque toujours des objectifs différents et doivent parfois être traités de différentes manières, de sorte que plusieurs fonctions telles que trier / ASORT faire une distinction entre eux juste pour la commodité.


1 commentaires

+1 pour la distinction entre la mise en œuvre et le code Userland. C'est des choses userland, je m'intéresse.



3
votes

.. Et puis il y a Splfixedarray , à partir de 5.3 , il ne prend en charge que des indices entier, a une taille fixe et est généralement plus rapide que les réseaux natifs.


1 commentaires

+1 Pour l'information, mais rappelez-vous que les objets Standard PHP Bibliothèque Array ne seront pas compatibles avec les fonctions de réseau PHP existantes, ce qui peut être irritant pour les anciennes mains.



2
votes

Une différence intéressante que j'ai trouvée est lorsque vous utilisez json_encode . xxx

comme exemple seul, c'est un sens, mais il est plus surprenant quand combiné avec, disons , array_filter . xxx

Nous avons démarré avec une matrice numérique, filtré certains éléments, mais le JSON résultant est un tableau associatif!


Notez que nous pouvons obtenir le JSON souhaité à l'aide de array_values ​​. xxx


0 commentaires