Удалить последнюю запятую
17 июля 2008
Типичная задача.
Сформировали список тэгов, расставляя после каждого «,». После последнего тоже запятая… надо убрать.
Наверное многие это уже знают, но всё же:
$str = 'tag1, tag2, tag3,'; echo substr($str, 0, -1);
Кстати, это можно решить ещё во время формирования строки.
Комментарии RSS по email OK
Можно ещё проще
$str = 'tag1, tag2, ..., tagN,';
$str = trim($str, ',');
Как решить во время форматирования я тоже отписал свой вариант в той записи.
Позволю с вами совсем не согласиться. Для этого есть chop() (который алиас rtrim())
Вызывается легко и непринужденно chop($str, ',');
А еще лучше chop($str, ' ,');
Объясню почему - в конце строки у вас может получиться так, что будет мусор, типа " , ".
Тогда вам придется делать echo substr(trim($str), 0, -1); - что есть ненужная нагрузка, когда есть chop, которому мы в конце скармливаем список символов для рубки :)
Ktulhu
trim тоже принимает список символов, но chop конечно более подходящая штука для данного случая.
А зачем формировать список тегов именно так, не удобней ли:
$tags = array('tag1', 'tag2', 'tag3');
echo implode(', ', $tags);
Чаще всего удобней, но иногда не выходит. Например, если массив многомерный… это не обязательно тэги.
Sam, тогда так может проще? :-)
Splurov
Так немного медленней, чем с формированием строки и chop().
Проявляется при обработке массива от 1000 элементов.
Sam, к счастью, нам не приходиться выводить пользователю списки из тысячи и более составляющих
Ну я то именно такой массив для тегов и представлял, но не хотел менять исходные данные.
Потестил тут немного для массива вида:
2) как предложил Splurov [code=php]$result = array(); foreach ( $links as $v ) { $result[] = '' . $v[ 'name' ] . ''; } $result = implode( ', ', $result );
[php]
$result = ''; foreach ( $links as $v ) { $result .= '' . $v[ 'name' ] . ', '; } $result = chop($result, ' ,'); ~~~
Для массива $links из 10 элементов (как наиболее типичный для тегов) и 100000 повторений получилось (в секундах все):
1) 7.84984397888
2) 2.80158305168
3) 2.40084600449, просто сборка без chop 1.68192100525
Не очень удачно запостился коммент, предварительный просмотр не повредил бы.
1)
2)
Вариант с chop() понравился, это звучит, как фраза «отрезать запятую в конце».
Спасибо за 4 варианта (trim, chop, substr и implode)! То что нужно!!!
Если интересует решение на яваскрипте:
Данные (Не важно, массив или просто набор слов через запятую) помещаем в переменную и обрезаем её на 1 символ с конца: