Page 1 sur 1
Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 05:34
par rimie
Bonjour,
Je fais une boucle foreach issue d'une requete, dont je selectionne les etudiants en les separant par un tiret (-), je veux enlever le dernier tiret pour avoir un affichage comme: Etudiant1 - Etudiant2 - Etudiant3
<?php
$etudiants_list = '';
foreach($resultshk as $shkK=>$shkV)
{
$etudiants_ar = $shkV['etudiants_ar'];
$etudiants_tran = $shkV['etudiants_tran'];
$etudiants_list .= '<a href="etudiantss/'.$etudiants_tran.'.html" title="'.$pic.'" class="tooltip">'.$etudiants_ar.'</a> - ';
echo substr($etudiants_list, 0,-1); // resultat: Etudiant1 -Etudiant2 -
}
?>
et quand je met echo hors de foreach{} il affiche juste le dernier element
merci pour votre aide
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 06:31
par moogli
Salut,
Si tu est sur de ton coup tu peux utiliser
strrchr pour trouver la dernière occurrence tu tirer et le supprimer ainsi Ue ce qu'il a ensuite.
Tu peux aussi, lors de la construction, vérifier s'il s'agit du dernier et ne mettre le tiret. Côté perd je ne sais pas lequel serait le plus rapide.
@+
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 06:34
par rimie
Salut,
Si tu est sur de ton coup tu peux utiliser
strrchr pour trouver la dernière occurrence tu tirer et le supprimer ainsi Ue ce qu'il a ensuite.
Tu peux aussi, lors de la construction, vérifier s'il s'agit du dernier et ne mettre le tiret. Côté perd je ne sais pas lequel serait le plus rapide.
@+
j'ai edite la partie
et quand je met echo hors de foreach{} il affiche juste le dernier element
elle etait dans le code
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 06:58
par moogli
Le echo c'est en dehors de la boucle qu'il faut le mettre ^^
Le reste semble bon en dehors du fait que ton dernier caractère c'est pas un tirer mais un espace
Je te conseil d'utiliser la fonction indiquée ci dessous voir de rester avez if dans le foreach !
@+
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 07:02
par rimie
je mets comme ca:
foreach(){
}
echo '...............';
alors je voudrais avoir un echo hors de la boucle et recuperer tout le resultat, pas le dernier seulement, c'est pour cela j'ai mis "$etudiants_list = '';"
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 07:49
par moogli
Avec le code que tu indique tu ajoute à la chaîne un lien à chaque tour de foreach (c'est le rôle du .=).
D'ailleurs en y réfléchissant ton code récupère seulement le dernier caractère. (regarde bien la doc de la fonction c'est un des cas qui y sont expliqués).
Encore une fois regarde la doc de la fonction que je t'est indiqué, ou utilisé substr avec la bonne fin.
@+
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 08:16
par rimie
si je defini une variable au sein de foreach(), et je la recupere apres, je dois obtenir tous les etudiants, par contre j'obtiens seulement le dernier:
foreach(){
$var = $etudiant;
}
echo $var; // je dois avoir ici la liste des etudiants
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 09:37
par xTG
La variable est écrasée à chaque itération de la boucle.
Il faut utiliser un tableau ou concaténer les valeurs dans une chaîne de caractères suivant ce que tu veux faire.
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 09:49
par moogli
<?php
$etudiants_list = '';
foreach($resultshk as $shkK=>$shkV)
{
$etudiants_ar = $shkV['etudiants_ar'];
$etudiants_tran = $shkV['etudiants_tran'];
$etudiants_list [size=200][b].=[/b][/size] '<a href="etudiantss/'.$etudiants_tran.'.html" title="'.$pic.'" class="tooltip">'.$etudiants_ar.'</a> - ';
echo substr($etudiants_list, 0,-1); // resultat: Etudiant1 -Etudiant2 -
}
?>
==> $etudiants_list
.= '<a href="etudiantss/'.$etudiants_tran.'.html" title="'.$pic.'" class="tooltip">'.$etudiants_ar.'</a> - ';
j'suis p'tet pas réveillé le matin mais c'est déja ce que fait le code de base, avec le echo a mettre en dehors.
ou est le problème ?
tu ne comprend pas le code que tu a posté ? si oui demande et peux expliquer, sinon ça va tourner en rond ^^
@+
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 09:56
par rimie
La variable est écrasée à chaque itération de la boucle.
Il faut utiliser un tableau ou concaténer les valeurs dans une chaîne de caractères suivant ce que tu veux faire.
quelque chose comme:
$sentence = array('apple'=>'one', 'orange'=>'two');
$list = '';
foreach($sentence as $k=>$v)
{
$list .= $k. ', ';
$suite[] = $k;
}
var_dump($suite).'<br />'; // retourne: array(2) { [0]=> string(5) "apple" [1]=> string(6) "orange" }
la comment extraire apple - orange
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 10:24
par sirakawa
Quant à moi, je pense que le plus simple est de mettre les éléments dans un tableau, comme dit ci-dessus,
foreach()
{
$tableau[] = "tout le barratin voulu";
}
$liste = implode ("-", $tableau);
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 12:46
par rimie
un truc comme:
<?php
$sentence = array('apple'=>'one', 'orange'=>'two');
foreach($sentence as $k=>$v)
{
$suite[] = '<a href="'.$v.'">'.$k.'</a>';
}
$liste = implode(' - ', $suite);
echo $liste;
?>
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 14:37
par moogli
par exemple ^^
Re: Enlever le dernier tiret(-)
Posté : 14 févr. 2012, 15:26
par rimie
merci a vous tous, c'est RESOLU