Une boucle avec for ne peut être faite avec sûreté que sur un tableau à indices numériques dans lequel les indices sont des entiers consécutifs et dont nous connaissons le premier et le dernier indice.
Une boucle for travaille sur le tableau lui même et permet donc un accès en consultation et en modification.

Exemple : boucle avec for
<?php require('bib_fonctions.php'); htmlDebut('Boucle avec for'); $t = array('Pierre','Paul','Jacques'); $iMax = count($t); echo '<hr><b>Nombre d\'éléments</b><hr>', $iMax; for ($i = 0; $i < $iMax; $i ++) { $t[$i] = strtoupper ($t[$i]); } echo '<hr><b>Contenu du tableau</b><hr>'; for ($i = 0; $i < $iMax; $i ++) { echo '<br>Index ', $i, ' = ', $t[$i]; } htmlFin(); ?>

Il ne faut jamais appeler une fonction qui renvoie toujours la même chose dans la partie du for qui teste si la boucle va continuer ou s'arrêter. Par exemple, un for écrit de la façon suivante :
for ($i = 0; $i < count($t); $i++) { ...
est une très mauvaise chose. La fonction count() est appelée à chaque itération, d'où une perte de temps et de ressources.
Il faut calculer la taille du tableau une seule fois (avant de parcourir les éléments du tableau) et la stocker dans une variable :
for ($i = 0, $iMax = count($t); $i < $iMax; $i++) {....

Pour illustrer nous allons utiliser la fonction chronometrer() écrite dans la chapitre précédent.

Exemple : boucle avec for
<?php require('bib_fonctions.php'); htmlDebut('Fonction mal placée'); $t = array_fill(0, 100000, 0); chronometrer('Avec count à chaque itération', 10); for ($i = 0; $i < count($t); $i++) { $x = $i; // juste pour avoir qqe chose } chronometrer(); chronometrer('Avec count 1 seule fois', 10); for ($i = 0, $iMax = count($t); $i < $iMax; $i++) { $x = $i; // juste pour avoir qqe chose } chronometrer(); htmlFin(); //================================================= function chronometrer($txt = '', $precis = 5) { static $debut, $texte, $precision; // Debut du chronométrage if ($txt != '') { $texte = $txt; $precision = $precis; $debut = microtime(); return; // Fin du début } // Arrêt du chronométrage $fin = microtime(); $t = explode(' ', $debut); $debut = $t[1].substr($t[0], 1); $t = explode(' ', $fin); $fin = $t[1].substr($t[0], 1); echo '<hr>Temps (', $texte, ') : ', round(bcsub($fin, $debut, 6), $precision), '<hr>'; } ?>