Enlever le dernier tiret(-)

Mammouth du PHP | 725 Messages

14 févr. 2012, 05:34

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
Modifié en dernier par rimie le 14 févr. 2012, 06:33, modifié 1 fois.

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

14 févr. 2012, 06:31

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.

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

14 févr. 2012, 06:34

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

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

14 févr. 2012, 06:58

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 !

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

14 févr. 2012, 07:02

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 = '';"

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

14 févr. 2012, 07:49

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.

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

14 févr. 2012, 08:16

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

ViPHP
xTG
ViPHP | 7331 Messages

14 févr. 2012, 09:37

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.

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

14 févr. 2012, 09:49

<?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 ^^

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

14 févr. 2012, 09:56

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

Mammouth du PHP | 2278 Messages

14 févr. 2012, 10:24

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);
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 725 Messages

14 févr. 2012, 12:46

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;
?>

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

14 févr. 2012, 14:37

par exemple ^^
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

14 févr. 2012, 15:26

merci a vous tous, c'est RESOLU