Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[求助] 关于循环读取数据库中使用变量字段的问题

[复制链接]
yz81 发表于 2011-7-11 16:58:42 | 显示全部楼层 |阅读模式
  如下代码,想从模板中提取字段名称,然后再用正则替换为想要获取的字段内容。
可是好像是先解析

$loop = '<a href=[field:tid]>[field:tname]</a>';
  $db = DB::query($sql);
    while ($field = DB::fetch($db)){
     $looptemp .= preg_replace("/\[field.+?)\]/i", $field['$1'], $loop);
    }

数据表中有tid tname两个字段,在上面的代码上如果用$field['$1']就无法获取内容,但如果直接用$field['tid']就可以获取。

好像是先解析了这个字段内容,然后再去正则替换。不知道有什么办法能实现动态读取字段内容呢?
回复

使用道具 举报

zhousw3856 发表于 2011-7-11 20:47:49 | 显示全部楼层
帮你顶
回复

使用道具 举报

sw08 发表于 2011-7-12 18:29:24 | 显示全部楼层
很奇怪你为什么要这么写,写成这样不行吗?
  1. $looptemp .= '<a href='.$field['tid'].'>'.$field['tname'].'</a>';
复制代码
回复

使用道具 举报

sw08 发表于 2011-7-12 18:32:29 | 显示全部楼层
要不就对每次查询到的$field进行foreach处理,以获得下标,再多用一个变量用来存储要替换的目标字串,然后后面就好做了。
回复

使用道具 举报

 楼主| yz81 发表于 2011-7-12 18:38:37 | 显示全部楼层
sw08 发表于 2011-7-12 18:29
很奇怪你为什么要这么写,写成这样不行吗?

我是要从“模板”(其实也不是htm模板,而是从某个字段里面获取的代码)里面去替换,所以不能直接在程序里面或“模板”里面用$field['tname'],这个字段名在程序里面是不固定的,要根据正则表达示去匹配而获得的。

在asp里面使用正则时可以用 Match.SubMatches(0) 这个代码实现,但在php里面用$1 就不行了。好像是先解析了$field['***'],然后再解析$1的。
回复

使用道具 举报

sw08 发表于 2011-7-12 18:44:27 | 显示全部楼层
yz81 发表于 2011-7-12 18:38
我是要从“模板”(其实也不是htm模板,而是从某个字段里面获取的代码)里面去替换,所以不能直接在程序里面 ...

这样用吧
$field[$1]

把单引号去掉,加了单引号系统当字符串处理了。

解析的时候是从里往外的。
回复

使用道具 举报

ilei365 发表于 2011-7-12 18:51:59 | 显示全部楼层
支持个。。。。。。
回复

使用道具 举报

 楼主| yz81 发表于 2011-7-12 18:52:07 | 显示全部楼层
sw08 发表于 2011-7-12 18:44
这样用吧
$field[$1]

刚测试过了也不行哈,如果直接用$field[$1].的话,整个页面打开显示空白了。
回复

使用道具 举报

sw08 发表于 2011-7-12 18:58:27 | 显示全部楼层
本帖最后由 sw08 于 2011-7-12 18:59 编辑
yz81 发表于 2011-7-12 18:52
刚测试过了也不行哈,如果直接用$field[$1].的话,整个页面打开显示空白了。

这个是我的测试程序段
  1. <?PHP
  2.   
  3. $field['tid'] = '123333';
  4. $x = 'tid';
  5. $loop = '<a href=[field:tid]>[field:tname]</a>';
  6. $looptemp = preg_replace("/\[field:(.+?)\]/i", $field[$x], $loop);
  7. echo $looptemp;

  8. ?>
复制代码



可以的啊,我就是用这个形式测试可以的
  1. $looptemp = preg_replace("/\[field:(.+?)\]/i", $field[$id], $loop);
复制代码
回复

使用道具 举报

sw08 发表于 2011-7-12 19:18:49 | 显示全部楼层
要不这样也可以,功能你懂的:
  1. $temp = '';
  2.   foreach ($field as $id => $value){
  3.       $temp = preg_replace("/\[field:(.+?)\]/i", $field[$id], $loop);
  4.   }
  5. $looptemp .= $temp;
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-8-25 19:13 , Processed in 0.111907 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表