2012-03-23 89 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);'結尾給其他有相同問題的人擺脫最後一個逗號,但我猜你對這個問題有更多的空格因爲這是唯一可行的。再次感謝。 – 2012-03-23 18:06:20

+0

正則表達式在這裏是矯枉過正的。你應該使用'implode(explode())'方法,或者'rtrim()',如我的答案所示。正則表達式並不一定是壞的,但它增加了不必要的開銷,並在一定程度上隱藏了代碼的含義。 – Bojangles 2012-03-24 00:35:04

+0

@JamWaffles:如果它是一個可以每小時運行幾萬次的函數的一部分,那麼你可以認爲它過度殺傷,但是對於看起來像是一次性問題,我認爲它並不重要。 – Crontab 2012-03-26 11:45:34

1

的實施例給rtrim()一去:

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

這將從您的字符串的末尾去除任何逗號。我已將str_replace()包含在rtrim()函數中,以將其保留在一行中,但將它分成兩部分可能會更清楚。

3
implode(', ', explode(' ', $base_string)); 
2

使用implode/explode。

$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; 
相關問題