我有一串文字:
$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" />
但是如果使用strtr
,那么相同的html是否需要在每个数组值中?
答案 0 :(得分:6)
尝试
$string= strtr($string,$smileys);
这将遍历$string
,并将$smileys
中每个密钥的每次出现替换为相关值。
修改强>
要将<img>
标记包含在字符串中,您可以使用单个
$string=preg_replace('/([\w]+\.gif)/i','<img src="$1">',$string);
这当然依赖于这样的假设:你的所有gif名称都不包含任何空格,并且你的字符串中没有其他单词如image.gif
,因为它们也会受到影响......
答案 1 :(得分:2)
试试这个:
foreach($smileys as $key => $value)
{
str_replace($key,$value,$string);
}
答案 2 :(得分:0)
这应该
foreach($smileys as $key=>$value){
$string = str_replace($smiley[$key], $smiley[$value], $string);
}