php 写模板引擎时 写到替换标签时不知如何替换嵌套循环标签。

如题,单个foreach()能替换了。代码如下:这个就是替换模板里标签的代码。问题来了,单个能替换了,但不知如何替换模板中有嵌套循环的标签,如以下标签:<foreachi... 如题,单个foreach()能替换了。代码如下:

这个就是替换模板里标签的代码。问题来了,单个能替换了,但不知如何替换模板中有嵌套循环的标签,如以下标签:
<foreach item=$v from=$user>
<foreach item=$v2 from=$v>
........
</foreach>
</foreach>
因为这是正则表达式。代码会把合规则的东西一次过替换。这样就出问题了,因为第一个from是来自模板引擎assign过来的值。但第二个是来自上一个循环的值 $v。
如果是正则,系统就会一次替换,把里面的循环中的 from也从assign值里找。这是明显找不到的。
求高手支招。
展开
 我来答
百度网友a19d193
2014-06-12 · TA获得超过3446个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1479万
展开全部
不理解什么是“要从assign里面找”呢?一般来说$view->assign('user', $user)的话,模板这边应该是直接使用$user的,而不是$assign['user'],这样就不存在你所说的问题了啊。
追问

现在是写模板,不是用模板。从assign里找指的是   :

从php向模板传的变量中找。。



好吧 问题已解决现在模板已经验解释嵌套标签了:

代码以下:

模板使用代码

显示结果:

追答
从php向模板传的变量应该是一个数组,但是在模板应用变量前应该将数组转换为变量,而不是从原始的数组中寻找,明白了?
例如,php传递了数组 $assign = array('user' => array(array('name'='u1')));
那么在模板使用该数组前可以这样做,
$vars = '';
foreach ($assign as $key => $value) $vars .= '$' . $key . ',';
//现在$vars == '$user'
if (! empty($vars)) {
$vars = substr($vars, 0, -1);
eval("list({$vars})=$assign;");
}
这样,$user这个变量可以在模板中直接使用了。

经过以上的处理

就都不必去assign值里面找了,从而解决了你的问题,明白了?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式