mardi 3 juin 2008

Afficher un élément à chaque passage dans une boucle sauf au dernier passage

Une fois n'est pas coutume, encore que..., parlons PHP...

Pour afficher une liste d'items, on veut souvent mettre un séparateur entre chaque élément comme par exemple ci-dessous :
Windows | Linux | Mac OS
Vous remarquerez que le séparateur n'est pas présent au début ni à la fin.

Dans une boucle PHP, on pourrait être tenté de faire comme ci-dessous :
$i = 0;
$arrayCount = count($array);
foreach ($array as $element) {
  echo $element;
  if ($i < $arrayCount) {
    echo ' | ';
  }
  $i++;
}


Alors qu'il y a en réalité beaucoup plus rapide :
$flag = false;
foreach ($array as $element) {
  if ($flag) {
    echo ' | ';
  }
  echo $element;
  $flag = true;
}


Merci Patrice ;)

1 commentaire:

R4f a dit…

Pour faire ceci, j'aurais plutôt fait :

$tab = array(1,2,3,4);
echo implode('|', $tmp_tab);

Bien plus élégant !


Si on tient à sa structure de boucle, autant faire ainsi :

$array = array('a', 'b', 'c', 'd');
$i = 0;
$tmp_tab = array();
foreach ($array as $element) {
$tmp_tab[] = $element;
$i++;
}
echo implode('|', $tmp_tab);

On se passe de compter le nombre d'éléments et de le comparer à un compteur (inutile) à chaque itération...

Pas mal, non ?