Cette opération est-elle moins triviale qu’elle n’y paraît ?

Parcours de tableaux

Le parcours de tableau en PHP et très simple. Il suffit d’écrire le code suivant :

  • Pour un simple tableau :
foreach ( $tableau as $element) {
	print $element;
}
  • Pour un tableau associatif :
foreach ( $tableau as $cle as $element) {
	print $cle."=".$element;
}

Modification de tableaux

Ces deux boucles sont valables pour les tableaux d’objets. Par contre, elles ne sont pas valables lorsque l’on souhaite modifier un ou plusieurs objets se trouvant dans le tableau.

Pourquoi ?

Le problème vient du fait que l’opérateur foreach fait une copie des objets qu’il trouve dans le tableau. Ainsi les objets modifiés ne sont que des pales copies des objets originaux.

Solutions

Il est possible de créer un nouveau tableau et d’y stocker les copies des objets. Mais cette solution n’est pas très élégante et dans le cas où le tableau contient beaucoup d’objet et/ou des très gros objets, il n’est peut-être pas souhaitable de copier tous ces éléments pour obtenir de meilleures performances.

C’est pourquoi, il est préférable d’utiliser le code suivant pour modifier les objets dans un tableau :

for ( $i = 0, $max = count($tableau), $i < $max; $i++) {
	print $tableau[$i];
	// modification des champs de l'objet $tableau[$i]
}