| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2083 人关注过本帖
标题:PHP 正则替换的问题
只看楼主 加入收藏
zhangyao3287
Rank: 2
来 自:黑龙江省
等 级:论坛游民
威 望:2
帖 子:173
专家分:51
注 册:2008-5-25
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
PHP 正则替换的问题
$content   = str_replace($value, $this->replaceLoop($labelInfo, $labelLoop, $nowNum, $listdb), $content);
这里会把相同的[loop=1]{style}[/loop]都给替换掉,但是我希望是把数据库的数据次序替换,有什么办法么,求大神帮忙,

$content = "[loop=1]{style}[/loop][loop=1]{style}[/loop][loop=1]{style}[/loop][loop=1]{style}[/loop]";
我希望替换成$content = "$listdb[0][title]$listdb[1][title]$listdb[2][title]$listdb[3][title]";
但是现在的结果是$content = "$listdb[0][title]$listdb[0][title]$listdb[0][title]$listdb[0][title]";

程序代码:
function replaceStyleLoop($listdb, $content) {
        if(count($listdb) < $this->labelNum) $this->labelNum = count($listdb);

        if(strpos($content, "[loop") < 0) $content = "[loop={@num}]" . $content;
        if(!strpos($content, "[/loop]")) $content .= "[/loop]";
        $content = str_replace("{@num}", $this->labelNum, $content);

        $nowNum = 0;
        preg_match_all("/\[loop=\d*][\s\S]*?\[\/loop]/", $content, $array);
        foreach($array[0] as $key => $value) {
            preg_match("/\[loop=\d*]/", $value, $arrNum);
            $labelLoop = (int)str_replace("[loop=", "", str_replace("]", "", $arrNum[0]));
            $labelInfo = str_replace("[loop=$labelLoop]", "", str_replace("[/loop]", "", str_replace("[loop]", "", $value)));
            $content   = str_replace($value, $this->replaceLoop($labelInfo, $labelLoop, $nowNum, $listdb), $content);
            $nowNum += $labelLoop;
            if($nowNum >= $this->labelNum) break;
        }
        $content = preg_replace("/\[loop=\d*][\s\S]*?\[\/loop]/", "", $content);
        return $content;
    }


[ 本帖最后由 zhangyao3287 于 2014-4-23 17:15 编辑 ]
搜索更多相关主题的帖子: content 数据库 
2014-04-23 17:11
asmdaydream
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:中原
等 级:版主
威 望:13
帖 子:257
专家分:840
注 册:2009-5-10
收藏
得分:10 
preg_replace 可以指定只替换一个

程序代码:
<?php

$content = "[loop=1]{style}[/loop][loop=1]{style}[/loop][loop=1]{style}[/loop][loop=1]{style}[/loop]";
$listdb = array(array('title'=>'db1'),array('title'=>'db2'),array('title'=>'db3'));

$pa = '/\[loop=1\]\{style\}\[\/loop\]/';
preg_match_all($pa, $content, $matches);

$count = count($matches[0])>count($listdb)?count($listdb):count($matches[0]);

for ($i=0;$i<$count;$i++){
    $content = preg_replace($pa, $listdb[$i]['title'], $content,1);
}

print_r($content);

结果 db1db2db3[loop=1]{style}[/loop]

常走夜路不怕黑 长沙PHP高薪招聘群6K+ 95926136
2014-04-24 11:05
zhangyao3287
Rank: 2
来 自:黑龙江省
等 级:论坛游民
威 望:2
帖 子:173
专家分:51
注 册:2008-5-25
收藏
得分:0 
哈哈,非常感谢
2014-04-25 11:05
快速回复:PHP 正则替换的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076576 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved