php preg_replace()特定文本与数组中的值[重复]

cotxawn7  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(88)

此问题已在此处有答案

what is the efficient way to parse a template like this in php?(3个答案)
How can I replace a variable in a string with the value in PHP?(13个回答)
关闭7天前。
抱歉标题和解释不好。
假设我有一个这样的数组:

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

一些HTML像这样:

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

使用PHP的preg_replace函数(或者其他函数,我不介意),是否可以将{}字符串替换为数组中的值?

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

arknldoa1#

你可以在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>

或者你可以使用例如。ouzo-goodies实现了StrSubstitutor

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

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

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

thtygnil2#

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

$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
);

相关问题