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 . P>
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). p>
Un exemple de ceci est le fonction Array_Merge . p>
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. P>
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. P> blockQuote>
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. P>
5 Réponses :
À peu près toutes les fonctions de tri de base (avec tous les trier code>,
ksort code>,
asort code> variations selon que vous souhaitez conserver la clé Association et ainsi de suite). P>
Le plus répandu que cela vient à l'esprit est qu'un matrice indexé peut être bouclé à l'aide d'un bien sûr, PHP dispose également d'un mot-clé code> de code>, qui fonctionne la même sur les deux types. p> p> traditionnel code> boucle, alors qu'un associatif ne peut pas (car il ne dispose pas des index numériques): < Pré> xxx pré>
+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 code> ou
suivant () code>, 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é.
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 code> /
ASORT code> faire une distinction entre eux juste pour la commodité. P>
+1 pour la distinction entre la mise en œuvre et le code Userland. C'est des choses userland, je m'intéresse.
.. 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. P>
+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.
Une différence intéressante que j'ai trouvée est lorsque vous utilisez comme exemple seul, c'est un sens, mais il est plus surprenant quand combiné avec, disons , Nous avons démarré avec une matrice numérique, filtré certains éléments, mais le JSON résultant est un tableau associatif! P > Notez que nous pouvons obtenir le JSON souhaité à l'aide de json_encode code>.
array_filter code>. p>
array_values code>. p>