用字符串中的值替换数组键

时间:2013-08-28 15:15:10

标签: php

我有一串文字:

$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是否需要在每个数组值中?

3 个答案:

答案 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);
}