PHP使用动态值替换文本字符串中的标记/占位符/标记

时间:2013-03-15 12:45:31

标签: php arrays variables replace

基本上,我想要实现的是用" Text"动态替换{SOME_TAG}。 我的想法是阅读所有标签,如{SOME_TAG},将它们放入数组中 然后将数组键转换为$some_tag之类的变量,并将它们放入数组中。

所以,这是我得到了多远:

//Some code goes here
$some_tag = "Is defined somewhere else.";
$different_tag = 1 + $something;
Some text {SOME_TAG} appears in different file, which contents has been read earlier.
//Some code goes here 

preg_match_all('/{\w+}/', $strings, $search);
$search = str_replace(str_split('{}'),"",$search[0]);
$search = array_change_key_case( array_flip($search), CASE_LOWER);
...some code missing here, which I cant figure out.

替换数组应该看起来像这样

$replace = array($some_tag, $different_tag);
//Then comes replacing code and output blah blah blah..

如何使数组$replace动态包含变量,具体取决于$search数组?

2 个答案:

答案 0 :(得分:5)

为什么不出现以下内容:

<?php

$replace = array(
  '{TAG_1}' => 'hello',
  '{TAG_2}' => 'world',
  '{TAG_3}' => '!'
);

$myString = '{TAG_1} {TAG_2}{TAG_3}{TAG_3}';

echo str_replace(array_keys($replace), array_values($replace), $myString);

答案 1 :(得分:1)

如果我理解正确:

您正在尝试使用{TAGS}创建可自定义的文档,以便表示可以使用动态信息填充的可替换区域。在用动态信息替换{TAGS}的某个时间点,您希望动态信息存储在自动生成的基本变量名称中,如$ tags。

我不确定为什么要将这些标记转换为基本变量,而不是将它们完全用作数组键。我想指出,这代表了一个安全或功能漏洞 - 如果有人将{REPLACE}作为标记放入文档中会发生什么?您的替换阵列将被动态数据覆盖,您的整个程序将崩溃。无论是那个,还是整个替换数组都会被转入{REPLACE},这使得一个非常混乱的文档可能包含你想要的数据。也许你有这个问题 - 我没有这里的所有背景 - 但我想我会指出风险因素。

至于更好的解决方案,除非你通过$ tag而不是直接使用$ replace数据来解决某些特定需求,否则我喜欢@Emissary的答案。