2013-08-28 103 views
0

我有一个文本字符串:用值替换字符串中数组键

$string = "This is a comment :) :D"; 

和键与值的数组:

$smileys = Array(':)' => 'smile.gif', ':D' => 'happy.gif'); 

我想替换数组键的任何出现在字符串与他们的相关值,所以输出字符串将是:

$string = "This is a comment smile.gif happy.gif"; 

我该怎么做?我试过如下循环但没有运气?

foreach($smileys as $smiley){ 

    $string = preg_replace("~\b$smileys\b~", $smileys[$smiley], $string); 

} 

编辑

我还想添加阵列之间的一些HTML和替换这样:

:D 

变成

<img src="/happy.gif" /> 

但将相​​同的HTML需要如果是strtr w,则在每个数组值中用过吗?

+0

听起来像一个简单的字符串替换应该努力 - 为正则表达式 – alfasin

回答

6

尝试

$string= strtr($string,$smileys); 

这将通过$string走,并以相应的值替换每个键的每次出现在$smileys

编辑:

要包括<img>标签到字符串你可以后期处理整个字符串用单

$string=preg_replace('/([\w]+\.gif)/i','<img src="$1">',$string); 

当然,这依赖于假设,即所有的gif名不包含任何空白,并且没有其他的话就像image.gif在你的字符串,因为他们会太受...

+0

没必要怎么样,如果我想要做的相当于:'$字符串= strtr函数的效率($字符串, “”);'第二个参数必须是一个数组,所以我只需要改变每个数组的值,或者有另一种方法来做数组值和一些HTML? – Dan

+0

只需更改数组。 '$ smileys = Array(':)'=>'',':D'=>'');' –

+0

@BenFortune好吧,我认为这将是需要做的,只有问题是有70多个数组项目,所以它增加了很多重复的html。 – Dan

0

这应该做

foreach($smileys as $key=>$value){ 
    $string = str_replace($smiley[$key], $smiley[$value], $string); 
} 
+1

如果他的数组中包含50个表情,你有什么建议?:) –

+0

这样更好... –

2

试试这个:

foreach($smileys as $key => $value) 
{ 
    str_replace($key,$value,$string); 
}