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 :mrgreen:

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