como faço para remover uma vírgula do final de uma string?

119

Quero remover a vírgula do final de uma string. Como agora estou usando

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

mas isso remove apenas o último caractere da string. Estou adicionando a string dinamicamente, então às vezes não há vírgula no final da string. Como posso fazer com que o PHP remova a vírgula do final da string se houver uma no final dela?

zeckdude
fonte

Respostas:

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

Docs para rtrimaqui

Sigurd
fonte
27
Isso removerá várias vírgulas: "a, b ,,," se tornará "a, b". Se é isso que o OP quer ou não, eu não sei ...
Greg
1
Obrigado, eu estava fazendo isso com substr, strlen, ... toda a minha vida
Farhad
38

Esta é uma questão clássica, com duas soluções. Se você quiser remover exatamente uma vírgula, que pode ou não estar lá, use:

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

Se você deseja remover todas as vírgulas do final de uma linha, use o mais simples:

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

A função rtrim (e ltrim correspondente para o corte esquerdo) é muito útil, pois você pode especificar um intervalo de caracteres a serem removidos, ou seja, para remover vírgulas e espaços em branco finais, você escreveria:

$string = rtrim($string, ", \t\n");
Ben Russell
fonte
Obrigado por essa explicação detalhada. Isso esclarece as coisas!
zeckdude
12

eu acho que você está concatenando algo no loop, como

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

muito melhor é coletar itens em uma matriz e, em seguida, juntá-la com um delimitador que você precisa

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

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

isso resolve problemas de delimitador duplo e final que geralmente ocorrem com concatenação

user187291
fonte
Boa sugestão. No entanto, nem todas as concatenações podem ocorrer no PHP. No meu caso, estou enviando uma string concatenada de Javascript para que o PHP seja desvendado.
Sablefoste
4

Se você estiver concatenando algo no loop, também poderá fazer desta forma:

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

dê uma olhada na função rtrim

rtrim ($string , ",");

a linha acima irá remover um caractere se o último caractere for uma vírgula

Anand Shah
fonte
1

Uma expressão regular simples funcionaria

$string = preg_replace("/,$/", "", $string)
AlexWilson
fonte
2
O desenvolvedor usa expressão regular para resolver um problema e agora ele tem dois problemas.
Sigurd
1

rtrim ($ string, ","); é a maneira mais fácil.

mepo
fonte
1

Eu tinha um incômodo espaço "invisível" no final da minha corda e tive que fazer isso

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

Mas uma solução acima é melhor

 $update_sql=rtrim($update_sql,', ');
zzapper
fonte
0

Preceda isso com:

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