Optimiser son code PHP (boucle foreach ou while/list)

© Christian PAULUS. Document créé le 16 octobre 2010 , mis à jour le 9 septembre 2011.

La mémoire est souvent la qualité de la sottise. Chateaubriand

Accueil du site > Astuces > PHP > Optimiser son code PHP (boucle foreach ou while/list)

Il n’est pas rare de voir sur la toile des tests et autres comparatifs de code PHP. Bien souvent, l’article ne mentionne :

  • ni la date du test
  • ni la version PHP concernée
  • et ne donne pas toujours le bout de code de test.

Un billet rencontré dernièrement prétend qu’une boucle while/list est plus efficace qu’un foreach. Vérifions en quelques lignes de code.

Deux méthodes pour parcourir un tableau tout en récupérant les clés/valeurs :

  • foreach
  • while, accompagné de list

De ces deux méthodes, laquelle est la plus efficiente, la plus rapide.

Exemple :

<?php

$tableau 
= array();

$cc 0;
while(
$cc 10000)
{
    
$tableau[$cc] = $cc;
    
$cc++;
}

$res = array('foreach' => array()
             , 
'list' => array());

$nb 3;

for(
$ii 0$ii $nb$ii++)
{
    
    
$start microtime(1);
    
    foreach(
$tableau as $k => $v)
    {
        
// rien
    
}
    
    
$res['foreach'][$ii] = microtime(1) - $start;
    
    
reset($tableau);
    
    
$start microtime(1);
    
    while(list(
$k$v) = each($tableau))
    {
        
// rien
    
}
    
    
$res['list'][$ii] = microtime(1) - $start;
    
}

echo(
'foreach: '
     
.implode("\t"$res['foreach'])
     .
"\t"
     
.(array_sum($res['foreach'])/$nb)
     .
PHP_EOL);

echo(
'list   : '
     
.implode("\t"$res['list'])
     .
"\t"
     
.(array_sum($res['list'])/$nb)
     .
PHP_EOL);

?>

Qui donne comme résultat sur mac mini Darwin Kernel Version 10.4.0/PHP 5 :

1 2 3 Average
foreach : 0.0011861324310303 0.0020849704742432 0.0011961460113525 0.0014890829722087
list : 0.01590895652771 0.010294198989868 0.010754108428955 0.012319087982178

Donc un foreach() plus rapide.

Plussoyez !

Les forums sont fermés.