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


119

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

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

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

Ответы:



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

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


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

4

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

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

2

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

rtrim ($string , ",");

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



1

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

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

2
Разработчик использовал регулярное выражение для решения проблемы, и теперь у него есть две проблемы.
Сигурд


1

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.