Boucle + supprimer le dernier caractère

Eléphanteau du PHP | 36 Messages

17 nov. 2015, 17:52

Bonjour,

je suis en train d'essayer de supprimer la dernière virgule de mon résultat dans une boucle mais je ne trouve pas la solution :
<?php
								$i = 0;
								foreach($lexamens[$rowL->l_id] as $l_id => $lexamen) {
									$comments = ($lexamen['commentaire'] !== '') ? '<i>'. $lexamen['commentaire'] .'</i>' : '';
									echo ''. $lexamen['nom'] .' '. $comments .', ';
									if((++$i % 5) === 0) {
										echo '<br />';
									}
								}
								?>
Dans le rendu ça donne : Examen1, Examen2, Examen3, Examen4, Examen5,<br />Examen6, Examen7,

Je voudrai supprimer la virgule après "Examen7,"

Un petit coup de pouce please ?

Merci !

Mammouth du PHP | 2703 Messages

17 nov. 2015, 17:55

concatener dans une chaine au lieu de faire un echo et un trim à la fin sur la virgule.

Eléphanteau du PHP | 36 Messages

17 nov. 2015, 18:05

Je ne suis pas sûr de comprendre ce que tu veux dire or1

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 nov. 2015, 18:09

salut,

il faut que tu compares l'index courant avec le nombre d'élement (moins 1). S'il ne s'agit pas du dernier élément tu affiches la virgule.
par exemple en testant la supériorité du nombre d'élément dans le tableau.

if( (count($tableau)-1) > $index) {
echo ',';
}

la solution de or1 est peux être la plus performante si la concaténation est plus performante que la comparaison.
A toi de voir ce que tu trouveras le plus lisible.

edit : concaténation avec +=
pour trim : http://php.net/trim
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 36 Messages

18 nov. 2015, 12:03

Du coup j'ai fonctionné comme ceci :

Je ne sais pas si c'est la méthode la plus optimale mais ça fonctionne...
<?php
								foreach($lexamens[$rowL->l_id] as $l_id => $lexamen) {
									if($lexamen['nom'] !== '' AND $lexamen['commentaire'] !== '') {
										$nomexamen = ''. $lexamen['nom'] .' <i>'. $lexamen['commentaire'] .'</i>';
									} else if($lexamen['nom'] !== '' AND $lexamen['commentaire'] === '') {
										$nomexamen = ''. $lexamen['nom'] .'';
									}
									$tableau[] = ''. $nomexamen .'- ';
								}
								$lastItem = count($tableau) -1;
								$tableau[$lastItem] = substr($tableau[$lastItem], 0, -2);
								$i = 0;
								foreach($tableau as $value){
									echo $value;
									if((++$i % 5) === 0) {
										echo '<br />';
									}
								}
								?>