我在模板文件中使用了大量PHP变量,其中一些变量需要为只能使用HTML的编辑者访问。我想要做的就是让他们在键入/编辑内容时识别变量,例如[ITEM_NAME_1],而PHP找到它们是因为它们用括号括起来,并用适当的PHP变量替换它们(在这种情况下,$ ITEM_NAME_1) )
每个页面的内容都在变量“$ page_content”中,所以现在我知道如何完成的唯一方法是手动编写行来替换我需要的内容。
$page_content = str_replace("[ITEM_NAME_1]", "$ITEM_NAME_1", "$page_content");
print $page_content
问题是有数百个“ITEM_NAME_X”变量,我不想为每个ITEM_NAME_X手动创建大量重复的“str_replace”行。
我想要完成的是让PHP在$ page_content中找到包含在方括号[]中的任何内容,从括号内取名称并用该括号名称的变量替换所有内容。因此,如果找到[ITEM_5],则将其替换为$ ITEM_5。这是可能吗?让我知道,谢谢。
答案 0 :(得分:2)
这是我用的:
public static function rewrite_curley($data,$message){
if(is_array($data)){
foreach($data as $key => $var){
$find = '{'.$key.'}';
$message = str_replace($find,$var,$message);
}
$message = preg_replace('/\{(.*)\}/','',$message); //strip any left over vars with out matches
}
return $message;
}
显然我的变量在{}中,因此函数名称为
答案 1 :(得分:0)
给preg_replace
/e
modifier一个旋转。将其与variable variable name syntax组合以获得您想要的效果。
$page_content = preg_replace('/\[(.*?)\]/e', '$$1', $page_content);
这使用正则表达式匹配方括号之间的字符串。捕获字符串,并使用替换字符串中的$1
进行访问。第二个$
查找以$1
中的任何内容命名的变量。
如果您想要更换更复杂的内容,可以从替换字符串中调用自己的函数。例如:
function substitute_tag($tag_name)
{
$replacement_values = array('foo' => 'bar', 'baz' => '42', ...);
return $replacement_values[$tag_name];
}
$page_content = preg_replace('/\[(.*?)\]/e', 'substitute_tag("$1")', $page_content);
答案 2 :(得分:0)
为什么不简单地使用数组作为str_replace的参数?
str_replace(array('string1', 'string2'), array('replacement1', 'replacement2'), $page_content);
这样就可以避免使用正则表达式。