2009-10-29 5 views
85

Я хочу удалить запятую с конца строки. Как сейчас, я используюКак удалить запятую с конца строки?

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

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

ответ

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

Docs for rtrim here

+25

Это удалит несколько запятых: «a, b ,,,» станет «a, b».Независимо от того, чего хочет OP или нет, я не знаю ... – Greg

+0

отлично, спасибо! – zeckdude

+1

Спасибо, я делал это с substr, strlen, ... всю свою жизнь – Farhad

2

взглянуть на RTrim функции

rtrim ($string , ","); 

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

0

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

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

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

1

RTRIM ($ строка «»); это самый простой способ.

9

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

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

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

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

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

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

+0

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

34

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

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

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

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

RTRIM функция (и соответствующая LTRIM для левой обшивкой) является очень полезным, как вы можете указать диапазон символов, чтобы удалить, т.е. удалить запятые и конечные пробелы можно было бы написать:

$string = rtrim($string, ", \t\n"); 
+0

Благодарим вас за подробное объяснение. Это проясняет ситуацию! – zeckdude

0

у меня было надоедливых «Invisi BLE»пространство в конце моей строки и должен был сделать это

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

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

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

Если вы конкатенации что-то в цикле, вы можете сделать это в этом также:

$coma = ""; 
foreach($a as $b){ 
    $string .= $coma.$b; 
    $coma = ","; 
} 
Смежные вопросы