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中?

4

3 回答 3

6

尝试

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

这将遍历并用关联的值$string替换每个键的每次出现。$smileys

编辑:

要将<img>标签包含到字符串中,您可以使用单个对整个字符串进行后处理

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

这当然依赖于假设您的所有 gif 名称不包含任何空格,并且image.gif您的字符串中没有其他单词,因为它们也会受到影响......

于 2013-08-28T15:17:36.447 回答
2

尝试这个:

foreach($smileys as $key => $value)
{
  str_replace($key,$value,$string);
}
于 2013-08-28T15:23:57.297 回答
0

这应该做

foreach($smileys as $key=>$value){
    $string = str_replace($smiley[$key], $smiley[$value], $string);
}
于 2013-08-28T15:20:02.857 回答