带有函数的PHP str_replace

时间:2012-11-27 22:40:21

标签: php str-replace

是否可以使用str_replace()并在替换中使用函数?

$value = "gal($data)";

$replace = str_replace($dat, $value, $string);

gal($data) 是一个功能,我需要为此功能替换一个代码并显示,但脚本最后只给我 gal($data) ,功能没有显示任何内容

是否可以使用str_replace()替换代码并用函数或类似方法替换?

1 个答案:

答案 0 :(得分:10)

PHP有一个名为preg_replace_callback的函数可以做到这一点。当你传递一个回调函数时,它会通过你的函数传递每个匹配。您可以根据匹配的值选择替换,或忽略它。

例如,假设我有一个匹配各种字符串的模式,例如[a-z]+。我可能不想用相同的值替换每个实例,所以我可以在找到吃匹配时调用函数,并确定我应该如何响应:

function callback ($match) {
    if ($match[0] === "Jonathan")
        return "Superman";
    return $match[0];
}

$subject = "This is about Jonathan.";
$pattern = "/[a-z]+/i";
$results = preg_replace_callback($pattern, "callback", $subject);

// This is about Superman.
echo $results;

请注意我们的回调函数如何为某些匹配返回特殊值,而不是所有匹配。

扩展缩写

另一个例子是查找。假设我们想要找到编程语言的缩写,并用它们的完整标题替换它们。我们可能有一个数组,其缩写为键,长名称为值。然后我们可以使用我们的回调功能来查找完整长度的名称:

function lookup ($match) {
    $langs = Array(
        "JS"  => "JavaScript", 
        "CSS" => "Cascading Style Sheets", 
        "JSP" => "Java Server Pages"
    );
    return $langs[$match[0]] ?: $match[0];
}

$subject = "Does anybody know JS? Or CSS maybe? What about PHP?";
$pattern = "/(js|css|jsp)/i";
$results = preg_replace_callback($pattern, "lookup", $subject);

// Does anybody know JavaScript? Or Cascading Style Sheets maybe? What about PHP?
echo $results;

因此,每当我们的正则表达式找到匹配项时,它会通过lookup传递匹配项,并且我们可以返回适当的值或原始值。