¿Cómo elimino una coma del final de una cadena?

119

Quiero quitar la coma del final de una cadena. Como es ahora estoy usando

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

pero eso solo elimina el último carácter de la cadena. Estoy agregando la cadena de forma dinámica, por lo que a veces no hay una coma al final de la cadena. ¿Cómo puedo hacer que PHP elimine la coma del final de la cadena si hay una al final?

zeckdude
fuente

Respuestas:

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

Documentos para rtrimaquí

Sigurd
fuente
27
Esto eliminará varias comas: "a, b ,,," se convertirá en "a, b". Si eso es lo que quiere el OP o no, no lo sé ...
Greg
1
Gracias, estuve haciendo esto con substr, strlen, ... toda mi vida
Farhad
38

Esta es una pregunta clásica, con dos soluciones. Si desea eliminar exactamente una coma, que puede o no estar allí, use:

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

Si desea eliminar todas las comas del final de una línea, use el más simple:

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

La función rtrim (y el ltrim correspondiente para el recorte izquierdo) es muy útil ya que puede especificar un rango de caracteres para eliminar, es decir, para eliminar las comas y los espacios en blanco finales, escribiría:

$string = rtrim($string, ", \t\n");
Ben Russell
fuente
Gracias por esa explicación detallada. ¡Eso aclara las cosas!
zeckdude
12

supongo que estás concatenando algo en el bucle, como

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

mucho mejor es recopilar elementos en una matriz y luego unirlos con un delimitador que necesita

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

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

esto resuelve problemas de delimitadores dobles y finales que suelen ocurrir con la concatenación

usuario187291
fuente
Buena sugerencia. Sin embargo, no todas las concatenaciones pueden tener lugar en PHP. En mi caso, estoy enviando una cadena concatenada de Javascript para que PHP la deshaga.
Sablefoste
4

Si está concatenando algo en el bucle, también puede hacerlo de esta manera:

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

echa un vistazo a la función rtrim

rtrim ($string , ",");

la línea anterior eliminará un carácter si el último carácter es una coma

Anand Shah
fuente
1

Una simple expresión regular funcionaría

$string = preg_replace("/,$/", "", $string)
AlexWilson
fuente
2
El desarrollador usa expresiones regulares para resolver un problema y ahora tiene dos problemas.
Sigurd
1

rtrim ($ cadena, ","); es la forma más sencilla.

mepo
fuente
1

Tenía un molesto espacio "invisible" al final de mi cadena y tenía que hacer esto

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

Pero una solución anterior es mejor

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

Antecede eso con:

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