Généralement, il existe trois méthodes pour parcourir un tableau : for, while et foreach. Le plus simple et le plus pratique d'entre eux est foreach. Alors, quelles sont les différences de fonctionnement et de performances entre eux ? Quelle méthode est généralement préférable d’utiliser ?
Testons d'abord le temps nécessaire pour parcourir un tableau unidimensionnel de 50 000 indices :
Plateforme de test :
Processeur : PM 725
Mémoire : 512 M
Disque dur : 40G 5400 tr/min
Système d'exploitation : Windows XP SP2
code de test
apache 2.0.54 php5.0.4
:
<?php
/*
* @ Auteur : Lilov
* @ Page d'accueil : www.codesky.com
* @E-mail : [email protected]
*
*/
$arr = tableau();
pour($i = 0; $i < 50000; $i++){
$arr[] = $i*rand(1000,9999);
}
fonction GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec+(float)$sec);
}
#####################################
$time_start = GetRunTime();
pour($i = 0; $i < count($arr); $i++){
$str .= $arr[$i];
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Durée utilisée pour :'.round($time_used, 7).'(s)<br><br>';
unset($str, $time_start, $time_end, $time_used);
#####################################
$time_start = GetRunTime();
while(list($key, $val) = each($arr)){
$str .= $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Durée utilisée pendant :'.round($time_used, 7).'(s)<br><br>';
unset($str, $key, $val, $time_start, $time_end, $time_used);
#####################################
$time_start = GetRunTime();
foreach($arr as $key => $val){
$str .= $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start ;
echo 'Temps utilisé pour foreach:'.round($time_used, 7).'(s)<br><br>';
######################################
?>
Résultats des tests :
faire la moyenne des trois résultats des tests :
Correspond respectivement à for, while, foreach
0,1311650
0,1666853
0.1237440
Après des tests répétés, les résultats montrent que pour parcourir le même tableau, foreach est le plus rapide et le plus lent est while. foreach est environ 20 à 30 % plus rapide que while. Augmentez ensuite l'indice du tableau à 500 000 et 5 000 000, et les résultats du test sont les mêmes. Mais d'un point de vue principe, foreach opère sur une copie du tableau (en copiant le tableau), tandis que while opère en déplaçant l'index interne du tableau. De manière générale, on pense que while devrait être plus rapide que foreach (car). foreach place en premier le tableau dans lequel le tableau est copié, tandis que while déplace directement le pointeur interne), mais le résultat est tout le contraire. La raison devrait être que foreach est une implémentation interne de PHP, tandis que while est une structure de boucle générale.
Par conséquent, dans les applications générales, je préfère utiliser le formulaire foreach, qui est simple et efficace. Sous PHP5, foreach peut également parcourir les attributs d'une classe.