0

基本上,我想要实现的是{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数组动态包含变量?

4

2 回答 2

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);
于 2013-03-15T13:11:21.187 回答
1

如果我理解正确:

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

我不确定为什么要将这些标签转换为基本变量,而不是将它们完全用作数组键。我想指出,这代表了一个安全或功能漏洞——如果有人将 {REPLACE} 作为标签放入您的文档会发生什么?你的替换数组会被动态数据覆盖,你的整个程序就会崩溃。要么就是这样,要么整个替换数组都会被转储到 {REPLACE} 中,从而产生一个非常混乱的文档,其中可能包含您不希望它们包含的数据。也许你已经解决了这个问题——我没有这里的所有背景——但我想我会指出风险因素。

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

于 2013-03-15T13:18:09.700 回答