2009-07-21 5 views
0

Y a-t-il un moyen de rendre cela plus rapide? Je n'aime pas que j'ai besoin de créer de nouvelles variables comme $ item.Comment faire une boucle de tableau plus rapide en PHP

+4

En fait, vous n'avez absolument pas besoin de la déclaration $ item. –

+0

Ne seriez-vous pas obligé de mettre $ item = current ($ data) dans le temps au lieu de l'instruction? –

+0

J'ai vérifié en utilisant le microtime pour la vitesse. Et il semble que l'utilisation de "while (current ($ data))" soit plus lente que "while ($ item = current ($ data))" mais très peu. L'utilisation de foreach est nettement plus rapide. –

Répondre

4
<?php 
$transport = array('foot', 'bike', 'car', 'plane'); 

foreach ($transport as $value) { 
    echo $value; 
} 
?> 
+0

en utilisant foreach fait plus vite –

0

Vous pourriez faire un foreach, mais vous créeriez alors 2 nouvelles variables. Sauf si vous n'aimez pas l'idée d'assigner des variables dans la clause while().

foreach($data as $key => $value) 
{ 
    echo $key . " => ".$value; 
} 

Dans les deux cas, vous devrez créer une variable réelle.

1

Si vous ne voulez pas créer des variables temporaires, le faire comme ceci:

while (current($data)) 
{ 
    echo '<ATTR>',current($data), '</ATTR>', "\n"; 
    next($data); 
} 

Cependant, je ne sais pas si cela va vraiment le faire plus vite. Ils seulement la façon de dire serait avec un profileur, mais c'est une telle micro-optimisation je doute que vous remarquerez la différence.

Le meilleur moyen d'accélérer la boucle serait d'utiliser un ordinateur plus rapide.

+0

D'accord, et si la boucle est assez grande pour qu'il y ait une différence notable, le temps nécessaire au serveur pour renvoyer la réponse écrasera le temps gagné en l'optimisant. –

+0

J'ai vérifié la vitesse en utilisant microtime() et foreach est plus rapide que current() et next() en boucle. –

+0

Oui, mais vous avez dit que vous ne voulez pas créer ces variables temporaires - avec la boucle 'foreach' vous en créez 2! –

1

Si tout ce que vous faites est le code ci-dessus, vous pouvez utiliser une instruction implode.


if (count($data) > 0) { 
    echo "<ATTR>".implode("</ATTR>\n<ATTR>", $data)."</ATTR>"; 
} 
+0

Vous voulez dire imploser ("\ n", $ data); –

+0

Ce qui, lorsqu'il est traité, prendra probablement le même temps (micro), puisqu'il fait probablement une boucle foreach. –

+1

Ahh il a édité son post ... –

1

$ nl = "\ n";

while ($item = current($data)) 
{ 
    echo '<ATTR>',$item, '</ATTR>',$nl; 
    next($data); 
} 

Stockez le caractère de nouvelle ligne dans une variable plutôt que d'analyser PHP les doubles guillemets dans chaque itération.

+0

C'est un bon conseil, merci. –

+2

Alex. Essayez d'utiliser PHP_EOL au lieu de stocker \ n en tant que variable. – hobodave

0

Qu'en est celui-ci:

function my_func($str) { 
    echo "<attr>{$str}</attr>\n"; 
} 
array_map('my_func', $data); 

(Si le travail, mais je suis curieux de sa vitesse par rapport à une boucle foreach)

Ou, si vous utilisez PHP> = 5.3 (probablement pas votre cas, btw), vous pouvez utiliser celui-ci, sur la base d'une fonction lambda:

array_map(function ($item) { 
    echo "<attr>{$item}</attr>\n"; 
}, $data); 

Presque la même chose, mais sans devoir déclarer une fonction utilisée une seule fois dans le programme.

Questions connexes