2012-03-23 82 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; 
相关问题