2012-03-23 3 views
4

У меня есть строка (а не массив, это загрузка слов, хранящихся в одной строке), и я хотел бы поместить запятую после каждого слова, ставя один за последним словом. У меня есть;PHP: добавить запятую после каждого слова (кроме финала)

echo str_replace(' ', ', ', $stilltodo); 

но по какой-то причине добавляет пробел перед запятой (и после тоже, но это право), а также один в конце тоже. Как я могу изменить его, чтобы работать, как я хочу.

Пример из 'базы' Строка

French History Maths Physics Spanish Chemistry Biology English DT Maths History DT Spanish English French RS 

Пример токового выхода с Кодексом выше

French , History , Maths , Physics , Spanish , Chemistry , Biology , English , DT , Maths , History , DT , Spanish , English , French , RS , 

ответ

5

Попробуйте это:

$newstring = implode(", ", preg_split("/[\s]+/", $oldstring)); 

preg_split() разделит вашу строку в массив и implode() разрушится все вместе в одну строку. Регулярное выражение, используемое в preg_split(), позаботится о любых случаях, когда у вас может быть несколько пробелов между словами.

+0

Спасибо. Я помещаю 'echo substr_replace ($ stilltodoplain," ", - 2);' на конец кому-то другому, имеющему ту же проблему, чтобы избавиться от последней запятой, но я предполагаю, что вы правы в этой проблеме с дополнительными пробелами поскольку это единственное, что работает. Еще раз спасибо. –

+0

Регулярное выражение здесь излишне. Вы действительно должны использовать метод 'implode (explode()) или' rtrim() ', как показано в моем ответе. Регулярное выражение не обязательно плохое, но оно добавляет лишние накладные расходы и немного улучшает смысл кода. – Bojangles

+0

@JamWaffles: Вы можете считать это излишним, если это часть функции, которая может запускаться десятки тысяч раз в час, но для того, что кажется разовой проблемой, я не думаю, что это действительно имеет значение. – Crontab

1

Дайте rtrim() идти:

echo rtrim(str_replace(' ', ', ', $stilltodo, ','); 

Это приведет к удалению любой запятой из конца вашей строки. Я обернул str_replace() в функции rtrim(), чтобы сохранить его в одной строке, но может быть более четким разбить его на две части.

2

Использование взрыва/взрыва.

$t = "French History Maths Physics Spanish Chemistry"; 

// turn this into an array 
$a = explode(" ", $t); 

// output without final comma 
echo implode(", ", $a); 

вы должны получить то, что вы хотите: «французский, история, математика, физика, химия, испанский»

0

Добавить запятую в строку без какой-либо функции .... его простой й 100% рабочий

<?php 

$arr = array(1,2,3,4,6,8,8,8,9); 

$str = ''; 

foreach ($arr as $key => $value) { 

     $str = ($str == '' ? '' : $str . ',') . $value; 

} 

echo $str; 
Смежные вопросы