我有一个包含各种XML样式标签的文本字符串($ contents),我希望将其转换为键值对数组($ tagArray)中的相应值。
$contents = "<text>Text element</text><break><list><bullet>Bullet text</bullet></list>";
$tagArray = array(
"image" => "img",
"title" => "h1",
"text" => "p",
"break" => "br",
"list" => "ul",
"subtitle" => "h2",
"bullet" => "li",
);
$keys = array_keys($tagArray);
for($i=0; $i < count($keys); ++$i) {
$re = '#<' . $keys[$i] . '>(.*?)</' . $keys[$i] . '>#';
$replaced_tags = preg_replace($re, $tagArray[$keys[$i]] , $contents);
echo $replaced_tags
}
$ replaced_tags的目标输出是:
<p>Text element</p><break><ul><li>Bullet text</li></ul>
由于$ contents字符串中不包含右括号,因此我将不得不单独处理break。
答案 0 :(得分:0)
这是一种方法。我们使用array_map
生成模式和替换数组,并将其传递给preg_replace
。这些模式包含可选的/
,因此它们可以匹配关闭和打开标签。通过在替换字符串中使用$1
,将其复制到替换中。
$from = array_map(function ($v) { return "#<(/?)$v>#"; }, array_keys($tagArray));
$to = array_map(function ($v) { return "<\$1$v>"; }, $tagArray);
echo preg_replace($from, $to, $contents);
输出:
<p>Text element</p><br><ul><li>Bullet text</li></ul>