将preg_replace与命名数组一起使用

时间:2013-10-19 12:08:53

标签: php preg-replace

我有一个preg_replace的问题:由于多语言,我为date()函数中的每个值创建了一个数组:

$a = array( "d" => "19", "l" => "Saturday", "F" => "October", "Y" => "", ...);

现在我希望有一个像$s = "{l}, the {d}. of {F} {Y}";

这样的字符串

我的问题是,如何使用preg_replace或sth将括号中的表达式替换为数组的值?我的问题是我不知道如何根据{}括号内的字符获取$a["Y"]

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

可以使用preg_replace_callback

$a = array( "d" => "19", "l" => "Saturday", "F" => "October" , "Y" => "");
$s = "{l}, the {d}. of {F} {Y}";

function callback($m) {
    global $a;
    return $a[$m[1]];
}

echo preg_replace_callback("/\{(.)\}/", "callback", $s);

答案 2 :(得分:0)

你基本上在做字符串替换;正则表达式在这里相当矫枉过正。我会创建一个像这样的函数

function insertTokens($string, $values)
{
    foreach ($values as $key => $value)
    {
        $string = str_replace('{'.$key.'}', $value);
    }
    return $string;
}

$newString = insertTokens($s, $a);