Répondre
Dans le premier, vous auriez un élément de tableau: Key: 0 Indice 0
Dans le second exemple, vous avez seulement un ensemble d'indices. Index: 0
$arr = array();
$arr['Hello'] = 'World';
$arr['YoYo'] = 'Whazzap';
$arr[2] = 'No key'; // Index 2
Dans le premier exemple que vous utilisez une chaîne pour indexer le tableau qui sera une table de hachage « sous le capot », qui est plus lent. Pour accéder à la valeur, un "nombre" est calculé à partir de la chaîne pour localiser la valeur que vous avez stockée. Ce calcul prend du temps.
Le deuxième exemple est un tableau basé sur des nombres qui est plus rapide. Les tableaux qui utilisent des nombres indexeront le tableau en fonction de ce nombre. 0 est l'indice 0; 1 est l'index 1. C'est un moyen très efficace d'accéder à un tableau. Aucun calcul complexe n'est nécessaire. L'index est juste un décalage par rapport au début du tableau pour accéder à la valeur.
Si vous utilisez uniquement des nombres, vous devez utiliser des nombres, pas des chaînes. Ce n'est pas une question de forme, c'est une question de savoir comment PHP va optimiser votre code. Les nombres sont plus rapides.
Cependant, les différences de vitesse sont négligeables lorsqu'ils traitent avec de petites tailles (tableaux stockant moins de 10 000 éléments, < Merci Paolo;)
Je pense que vous surestimez les différences de vitesse ici. Oui, le premier est plus lent mais pas radicalement ou à un niveau quelconque qui le rend pertinent à une application à moins que vous ne fassiez des centaines de milliers de permutations. –
ils sont à la fois bien, ils seront tous deux travaux. La différence est que sur la première, vous définissez la valeur 1 à une clé appelée '0' sur le deuxième exemple, vous définissez la valeur 2 sur le premier élément dans le tableau.
ne pas les mélanger accidentellement;)
Si vous envisagez d'augmenter vos clés utilisent la deuxième option. Le premier est un tableau associatif qui contient la chaîne "0" comme clé.
Le truc "marrant", c'est que vous obtiendrez exactement le même résultat. PHP (pour une raison quelconque) teste si une chaîne utilisée comme index de tableau ne contient que des chiffres. Si c'est le cas, la chaîne est convertie en int ou en double.
<?php $x=array(); $x['0'] = 'foo'; var_dump($x); $x=array(); $x[0] = 'foo'; var_dump($x);
Pour les deux tableaux que vous obtenez [0] => toto, non [ "0"] => toto.
Ou un autre test:
<?php $x = array(); $x[0] = 'a'; $x['1'] = 'b'; $x['01'] = 'c'; $x['foo'] = 'd';foreach($x as $k=>$v) { echo $k, ' ', gettype($k), "\n"; }
0 integer 1 integer 01 string foo string
Si vous ne croyez toujours pas jeter un oeil à #define HANDLE_NUMERIC (clé, longueur, func) dans zend_hash.h et quand et où il est utilisé.
Vous pensez que c'est bizarre? Choisissez un numéro et mettez-vous en ligne ...
Ils sont tous les deux "corrects" mais ont les différents effets secondaires notés par d'autres.
Une autre chose que je voudrais signaler, si vous êtes juste pousser les éléments à un tableau, vous pouvez préférer cette syntaxe:
$ a = array(); $ a [] = 1; $ a [] = 2; // maintenant $ a [0] vaut 1 et $ a [1] vaut 2.
- 1. CreateRemoteThread, LoadLibrary et PostThreadMessage. Quelle est la méthode IPC appropriée?
- 2. Est-ce que Javascript est une plate-forme appropriée pour la cryptographie? Ou peut-il être?
- 3. Quelle est l'utilisation appropriée pour le contrôle MultiView d'ASP.NET?
- 4. Quelle est la forme de tableau de 'supprimer'?
- 5. Quelle option de conception est la plus appropriée pour l'auto-correction sur la construction?
- 6. Quelle est la procédure appropriée pour offrir un correctif à la documentation Python?
- 7. Quelle est la manière la plus sûre/appropriée d'implémenter un modèle singleton thread-safe?
- 8. Quelle est la manière la plus appropriée d'utiliser MemoryMappedViewAccessors de .Net 4.0?
- 9. Quelle est la méthode appropriée pour déclencher un événement de contrôle ASP.NET par programme?
- 10. Quelle architecture SOA est la plus appropriée pour une application Java?
- 11. Adobe AIR - Quelle est la méthode appropriée pour utiliser un EventListener sur une fenêtre nouvellement créée?
- 12. Quelle est la valeur initiale appropriée pour un compteur de performance ElapsedTime?
- 13. Quelle est la source appropriée pour le composant Windows Common Controls 6.0 (MSCOMCTL.OCX)?
- 14. Quelle est la manière appropriée de taper fortement le retour d'une fonction générique?
- 15. Conception appropriée
- 16. Quelle est la différence entre la forme et la structure d'un objet?
- 17. Quelle forme d'analyse d'alias est utilisée par Visual C++?
- 18. Rails affirment que la forme est valide
- 19. Est-ce une conception MonoState appropriée?
- 20. Dans le cas d'exceptions de code non gérées, quelle est la chose la plus appropriée pour montrer l'utilisateur final?
- 21. C#: Quelle est la méthode C# appropriée pour lire les arguments/paramètres dans les applications de la console?
- 22. Quelle est l'étiquette appropriée pour gérer le code existant potentiellement réutilisable dans les grands projets?
- 23. Quelle est la définition «principale» de la plateforme multiplate-forme préférée? Utilisation de boost :: options_programme?
- 24. Quelle est l'entrée de dépendance appropriée dans pom.xml pour utiliser l'analyseur Snowball avec Lucene 2.4.0?
- 25. Une classe statique est-elle appropriée lorsque l'état est immuable?
- 26. Quelle est la différence?
- 27. Quelle est la cartographie appropriée JPA pour @Id dans l'ordre parent et unique dans les classes de base
- 28. Quelle est l'exception la plus appropriée à lancer si un paramètre de configuration app/web.config requis n'est pas présent?
- 29. Quelle est la longueur minimale appropriée d'une adresse e-mail telle que définie par l'IETF ou similaire?
- 30. Quelle est la bonne façon d'étiqueter les choses sous une forme?
La prochaine fois, essayez de choisir un meilleur titre. Quelque chose comme: "Quelle est la syntaxe correcte pour l'assignation de tableau en PHP?" – Hejazzman
Vraiment? Vous pinailler le titre ??? wow – KOGI