用数组替换PHP长字符串模式

时间:2015-04-08 10:21:21

标签: php regex

让我说我有字符串

$pattern = "Hello my name is %name%. I'am %age% years old and I live in %city%."

用于替换此字符串的索引数组

$replacementArray = array("name"=>"Peter", "age"=>"15", "city"=>"Stockholm");
  

名为数组键的公告通知与我的模式键相同)

     

名称”=>“彼得”,我的名字是%name%

最有效的方法是什么,我该怎么做。

我不确定,但我认为它需要一些正则表达式替换。我是PHP的新手。

3 个答案:

答案 0 :(得分:1)

这应该适合你:

(这里我只是遍历所有替换,然后在模式中用str_replace()替换)

<?php

    $pattern = "Hello my name is %name%. I'am %age% years old and I live in %city%.";
    $replacementArray = ["name" => "Peter", "age" => "15", "city" => "Stockholm"];

    foreach($replacementArray as $k => $v) {
        $pattern = str_replace("%$k%", $v, $pattern);
    }

    echo $pattern;

?>

输出:

Hello my name is Peter. I'am 15 years old and I live in Stockholm.

您也可以反过来执行此操作,只需在每个键之前和之后追加%,如下所示:

echo str_replace(array_map(function($v){return "%$v%";}, array_keys($replacementArray)), array_values($replacementArray), $pattern);

答案 1 :(得分:0)

此表达式将从您的字符串中获取模式键

preg_match_all('/\%(.*?)\%/',$pattern, $matches); 

答案 2 :(得分:0)

您可以使用正则表达式或尝试此

循环$ replacement array

 foreach($replacement as $key=>$val){
   $pattern = str_replace($key,$val,$pattern);
}