preg_replace()具有数组值的特定文本

时间:2015-02-08 16:02:36

标签: php regex

为糟糕的头衔和解释道歉。

说我有这样的数组:

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);

和一些这样的HTML:

<h1>{name}</h1>
<p>{description}</p>

使用PHP的preg_replace函数(或者别的,我不介意),是否可以用数组中的值替换{}字符串?< / p>

<h1>Hello</h1>
<p>World</p>

2 个答案:

答案 0 :(得分:2)

你可以在vanilla PHP中这样做:

$str = '<h1>{name}</h1>
<p>{description}</p>';

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);

echo preg_replace_callback('/\{(\w+)}/', function($match) use ($myArray){
    $matched = $match[0];
    $name = $match[1];
    return isset($myArray[$name]) ? $myArray[$name] : $matched;
}, $str);

结果如下:

<h1>Hello</h1>
<p>World</p>

或者您可以使用例如实现StrSubstitutor

ouzo-goodies
$str = '<h1>{{name}}</h1>
<p>{{description}}</p>';

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);

$strSubstitutor = new StrSubstitutor($myArray);
$substituted = $strSubstitutor->replace($str);

答案 1 :(得分:0)

首先,让我们构造正则表达式:

$re = implode('|', array_map(function($el) { 
                     return '{' . $el . '}'; 
                   }, array_keys($myArray));

现在我们准备摇滚了:

$result = preg_replace_callback(
  "/$re/", 
  function($match) use($myArray) { 
    return $myArray[$match[0]]; 
  } , $input
);