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?

Respostas:


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

Docs para rtrimaqui


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");

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


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 = ",";
}

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



1

Uma expressão regular simples funcionaria

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

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.


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,', ');

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.