come faccio a rimuovere una virgola dalla fine di una stringa?


119

Voglio rimuovere la virgola dalla fine di una stringa. Come è ora che sto usando

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

ma questo rimuove solo l'ultimo carattere della stringa. Sto aggiungendo la stringa in modo dinamico, quindi a volte non c'è virgola alla fine della stringa. Come posso fare in modo che PHP rimuova la virgola dalla fine della stringa se ce n'è una alla fine?

Risposte:


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

Documenti per rtrimqui


27
Questo rimuoverà più virgole: "a, b ,,," diventerà "a, b". Che sia quello che vuole o no l'OP, non lo so ...
Greg

1
Grazie, l'ho fatto con substr, strlen, ... per tutta la vita
Farhad

38

Questa è una domanda classica, con due soluzioni. Se vuoi rimuovere esattamente una virgola, che potrebbe essere presente o meno, usa:

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

Se vuoi rimuovere tutte le virgole alla fine di una riga usa il più semplice:

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

La funzione rtrim (e il corrispondente ltrim per il trim sinistro) è molto utile in quanto puoi specificare un intervallo di caratteri da rimuovere, ad esempio per rimuovere virgole e spazi bianchi finali che dovresti scrivere:

$string = rtrim($string, ", \t\n");

Grazie per quella spiegazione dettagliata. Questo chiarisce le cose!
zeckdude

12

immagino tu stia concatenando qualcosa nel ciclo, tipo

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

molto meglio è raccogliere gli elementi in un array e poi unirli con un delimitatore di cui hai bisogno

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

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

questo risolve i problemi di trailing e double delimitatori che di solito si verificano con la concatenazione


Buon suggerimento. Tuttavia, non tutte le concatenazioni possono avvenire in PHP. Nel mio caso, sto inviando una stringa concatenata Javascript per PHP da svelare.
Sablefoste

4

Se stai concatenando qualcosa nel ciclo, puoi farlo anche in questo modo:

$coma = "";
foreach($a as $b){
    $string .= $coma.$b;
    $coma = ",";
}

2

dai un'occhiata alla funzione rtrim

rtrim ($string , ",");

la riga sopra rimuoverà un carattere se l'ultimo carattere è una virgola



1

Una semplice espressione regolare funzionerebbe

$string = preg_replace("/,$/", "", $string)

2
Lo sviluppatore usa l'espressione regolare per risolvere un problema e ora ha due problemi.
Sigurd

1

rtrim ($ stringa, ","); è il modo più semplice.


1

Avevo un fastidioso spazio "invisibile" alla fine della mia stringa e dovevo farlo

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

Ma una soluzione sopra è migliore

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.