comment supprimer une virgule à la fin d'une chaîne?

119

Je veux supprimer la virgule à la fin d'une chaîne. Tel qu'il est maintenant j'utilise

$string = substr($string,0,-1);

mais cela ne supprime que le dernier caractère de la chaîne. J'ajoute la chaîne de manière dynamique, donc parfois il n'y a pas de virgule à la fin de la chaîne. Comment puis-je demander à PHP de supprimer la virgule à la fin de la chaîne s'il y en a une à la fin?

zeckdude
la source

Réponses:

303
$string = rtrim($string, ',');

Docs pour rtrimici

Sigurd
la source
27
Cela supprimera plusieurs virgules: "a, b ,,," deviendra "a, b". Que ce soit ce que l'OP veut ou non, je ne sais pas ...
Greg
1
Merci, je faisais ça avec substr, strlen, ... toute ma vie
Farhad
38

C'est une question classique, avec deux solutions. Si vous souhaitez supprimer exactement une virgule, qui peut être présente ou non, utilisez:

if (substr($string, -1, 1) == ',')
{
  $string = substr($string, 0, -1);
}

Si vous souhaitez supprimer toutes les virgules de la fin d'une ligne, utilisez le plus simple:

$string = rtrim($string, ',');

La fonction rtrim (et ltrim correspondant pour le trim à gauche) est très utile car vous pouvez spécifier une plage de caractères à supprimer, c'est-à-dire pour supprimer les virgules et les espaces de fin que vous écririez:

$string = rtrim($string, ", \t\n");
Ben Russell
la source
Merci pour cette explication détaillée. Cela clarifie les choses!
zeckdude
12

je suppose que vous concaténez quelque chose dans la boucle, comme

foreach($a as $b)
  $string .= $b . ',';

mieux est de collecter des éléments dans un tableau, puis de le joindre avec un délimiteur dont vous avez besoin

foreach($a as $b)
  $result[] = $b;

$result = implode(',', $result);

cela résout les problèmes de fin et de double délimiteur qui se produisent généralement avec la concaténation

user187291
la source
Bonne suggestion. Cependant, toutes les concaténations ne peuvent pas avoir lieu en PHP. Dans mon cas, j'envoie une chaîne concaténée Javascript pour que PHP se décompose.
Sablefoste du
4

Si vous concaténez quelque chose dans la boucle, vous pouvez également le faire de cette façon:

$coma = "";
foreach($a as $b){
    $string .= $coma.$b;
    $coma = ",";
}
cesar.mi
la source
2

jetez un œil à la fonction rtrim

rtrim ($string , ",");

la ligne ci-dessus supprimera un caractère si le dernier caractère est une virgule

Anand Shah
la source
1

Une simple expression régulière fonctionnerait

$string = preg_replace("/,$/", "", $string)
AlexWilson
la source
2
Le développeur utilise une expression régulière pour résoudre un problème et il a maintenant deux problèmes.
Sigurd
1

rtrim ($ chaîne, ","); est le moyen le plus simple.

Moi po
la source
1

J'avais un espace "invisible" embêtant au bout de ma chaîne et je devais le faire

 $update_sql=rtrim(trim($update_sql),',');

Mais une solution ci-dessus est meilleure

 $update_sql=rtrim($update_sql,', ');
zzapper
la source
0

Faites précéder cela par:

if(substr($string, -1)==",")
Kaivosukeltaja
la source