$test = explode(',' $foo);
foreach($test as $bar) { ... }
4 Réponses :
efficacité dans quel sens? Gestion de la mémoire, ou processeur? Le processeur ne ferait pas la différence, pour la mémoire - vous pouvez toujours faire $ foo = exploser (',', $ foo) code> p> p>
Dans le premier cas, PHP l'explose une fois et la maintient en mémoire. P>
L'impact de la création d'une variable différente ou de l'autre sens serait négligeable. L'interpréteur PHP devra maintenir un pointeur sur un emplacement de l'élément suivant s'ils sont définis par l'utilisateur ou non. P>
Du point de mémoire, il ne fera pas la différence, car php utilise le copie sur le concept d'écriture . p>
En dehors de cela, je choisirai personnellement la première option - c'est une ligne de moins, mais pas moins lisible (IMHO!). P>
@Ryan: Ooops, je voulais dire le premier;)
Je pourrais faire une supposition éduquée, mais essayons-le em>! J'ai pensé qu'il y avait trois moyens principaux de s'approcher de cela. p> Mes hypothèses: p> Voici mon script de test: p> et voici les trois versions: p> 1 ) P> en termes de nombre d'appels de fonction, J'ai ajouté un bonus au graphique où je exécute la méthode 1) avec un appel de fonction dans la boucle . J'ai utilisé Comme vous pouvez le constater dans la table des résultats, il devient alors la méthode la plus lente des trois. P> Ceci est Intéressant à savoir, mais ma suggestion est de faire ce que vous ressentez est le plus lisible / maintenu. Seulement si vous avez vraiment affaire à un jeu de données de manière significative, vous vous inquiétez de ces micro-optimisations. P> P>
Approche H2>
// explode separately
$arr = explode(',', $listStr);
foreach ($arr as $val) {strlen($val);}
exploser () code> en ligne sans pré-assignation, c'est un peu plus lent pour une raison quelconque. Li>
strtok () code> chaque itération. Plus sur ce ci-dessous. LI>
ul> Exploser () CODE> ING TOPS TOKENISANT. o (1) em> vs o (n) p> SHLEN ($ VAL) code>, pensant que ce serait un temps d'exécution relativement similaire. C'est sujet à un débat, mais je n'essayais que de faire un point général. (Je n'ai que couru strallen ($ val) code> et ignoré sa sortie. Je l'ai dit pas em> l'attribuez à rien, car une mission serait un coût de temps supplémentaire.) p> Pensée finale H2>
Il est assez évident que $ x = ...; foreach ($ x code> utilisera plus de mémoire après i> la boucle que foreach (... code> . Simplement parce que la variable code> x code> il est toujours intacte après-mots. Mais cela n'a pas beaucoup d'importance. La variable sera détruite sur un retour code> ou, si la mémoire est critique, peut simplement être nonset code>. Qu'est-ce que est i> intéressant est l'utilisation de la mémoire maximale, car seulement cela compte vers la mémoire_limit. Et ici je suis très confiant que cela vous donnera assez semblable Résultats pour les deux variantes de Foreach. N'oubliez pas: si vous êtes une mémoire "Benchmarking", vous souhaitez normalement utiliser Memory_Get_peak_USAGE CODE>, pas ...
... memory_get_usage code>. Le fait que les n ° 2 et les n ° 3 sont identiques en mémoire rendent également du fait que vous ne faites que mesurer l'utilisation de la mémoire après la boucle. La mémoire de pointe serait probablement plus petite pour strtok code>. Cela n'a rien à voir avec PHP Transformant le exploser code> à la jonction de la jonction lors d'une boucle. Et concernant votre dernier exemple: les appels de fonction sont coûteux en PHP;) Vous SHLEN ($ VAL); code> impliquerait d'exécuter cinq opcodes.
Merci, il est également important de mentionner version code> et os code> pour ces résultats.
@ Tomalak-Geretkal merci, c'est une structure de contrôle.