【问题标题】:Loop through custom template hooking thing循环通过自定义模板挂钩的东西
【发布时间】:2010-05-01 12:42:29
【问题描述】:

我正在构建一个模板系统,用于向人们发送电子邮件,目前采用以下格式:

$array['key1'] = "text";
$array['key2'] = "more text";

<!--key1--> // replaced with *text*
<!--key2--> // replaced with *more text*

对于这个特定的项目,我有一个具有这种结构的嵌套数组:

$array['object1']['nest1']['key1'] = "text";
$array['object2']['next1']['key1'] = "more text";

<!--[object1][nest1][key1]--> // replaced with *text*
<!--[object2][nest1][key1]--> // replaced with *more text*

&lt;!-- .. --&gt; 将被放置在一个 HTML 文件中,然后加载到一个字符串中。上面的示例显示我正在用数据替换 cmets。

在 PHP 中执行此操作的最佳方法是什么?我以为我可以遍历数组,但后来我失去了思路,迷失在我正在做的事情中!

所有帮助将不胜感激! 谢谢

【问题讨论】:

  • 那么,您想用数组中的内容替换字符串中类似数组的部分吗?
  • 有点……它更像是一个模板引擎
  • 不,因为那是为了更多的 php,这是为了迭代文件(或字符串)来替换文本。
  • 无论如何,您都需要从模板文件中提取要替换的文本。一旦你这样做,它就是同样的问题。看看你得到的答案是否与该问题的答案有显着差异。

标签: php arrays templates


【解决方案1】:

嗯,使用 eval 是危险的,但如果所有代码都由你运行,它不会受到伤害。你可以试试这个:

<?php

$array['object1']['nest1']['key1'] = "text";
$array['object2']['nest1']['key1'] = "more text";

$str = "sadfadsfjäadsföljadsölf
<!-- ['object2']['nest1']['key1'] -->
asdföadsjlf";

$split = explode('
',$str); // This sucks, you can use \n to detect line-breaks. Doesn't work that way in this example

foreach($split as $key => $value) {
    if(preg_match('/\<\!\-\- (\[.+\]) \-\-\>/e',$value,$matches)) {
    eval("echo \$array".$matches[1].";");
    echo "\n";
} else {
    echo $value."\n";
}
}

?>

很奇怪的方式,但我想不通。

【讨论】:

  • “如果 eval() 是答案,那么你几乎肯定问错了问题。”
  • 这就是我的第一行的意思,但这是我认为最清晰的方法。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2018-11-19
  • 2012-08-19
  • 2021-12-22
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多