как убрать запятую с конца строки?

119

Я хочу убрать запятую с конца строки. Сейчас я использую

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

но при этом удаляется только последний символ строки. Я добавляю строку динамически, поэтому иногда в конце строки нет запятой. Как я могу заставить PHP удалить запятую в конце строки, если она есть в конце?

zeckdude
источник

Ответы:

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

Документы rtrimздесь

Сигурд
источник
27
Это удалит несколько запятых: «a, b ,,,» станет «a, b». Я не знаю, хочет ли это OP или нет ...
Грег,
1
Спасибо, я делал это с substr, strlen, ... всю свою жизнь
Фархад
38

Это классический вопрос с двумя решениями. Если вы хотите удалить ровно одну запятую, которая может быть, а может и не быть, используйте:

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

Если вы хотите удалить все запятые в конце строки, используйте более простой вариант:

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

Функция rtrim (и соответствующая ltrim для левой обрезки) очень полезна, поскольку вы можете указать диапазон символов для удаления, то есть для удаления запятых и завершающих пробелов, которые вы должны написать:

$string = rtrim($string, ", \t\n");
Бен Рассел
источник
Спасибо за подробное объяснение. Это проясняет ситуацию!
zeckdude
12

я думаю, вы что-то объединяете в цикл, например

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

гораздо лучше собрать элементы в массив, а затем соединить его с нужным разделителем

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

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

это решает проблемы с замыкающими и двойными разделителями, которые обычно возникают при конкатенации

user187291
источник
Хорошее предложение. Однако не все конкатенации могут выполняться в PHP. В моем случае я отправляю объединенную строку Javascript, чтобы PHP распутал ее.
Sablefoste
4

Если вы что-то объединяете в цикл, вы тоже можете сделать это следующим образом:

$coma = "";
foreach($a as $b){
    $string .= $coma.$b;
    $coma = ",";
}
cesar.mi
источник
2

взгляните на функцию rtrim

rtrim ($string , ",");

строка выше удалит символ, если последний символ - запятая

Ананд Шах
источник
1

Подойдет простое регулярное выражение

$string = preg_replace("/,$/", "", $string)
AlexWilson
источник
2
Разработчик использовал регулярное выражение для решения проблемы, и теперь у него есть две проблемы.
Сигурд
1

rtrim ($ строка, ","); это самый простой способ.

MEPO
источник
1

У меня было неприятное "невидимое" пространство на конце моей строки, и мне пришлось сделать это

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

Но решение выше лучше

 $update_sql=rtrim($update_sql,', ');
zzapper
источник
0

Перед этим укажите:

if(substr($string, -1)==",")
Kaivosukeltaja
источник