找回密码
 新建账号

[PHP] PHP动态变量替换

[复制链接]
php 发表于 2012/11/18 10:13 | 显示全部楼层 |阅读模式
PHP动态变量替换,可以使用正则的e修饰符将正则视作PHP代码执行,
如以下例子,将字符串中的abc提取出来,转换为变量$abc,将{abc}替换为变量$abc的md5值:
<?php
$abc="aaaa";
$str="hello {abc} world!";
$preg="/{(.*)}/ieU";
echo preg_replace($preg,"md5($\\1)",$str);
?>除了正则e修饰符外,还可以用正则+字符替换的方法,当然,这得稍微麻烦一点.不过还是很好理解.
假设有一个模板页m.htm
----------
<html>
<body>
<div>
{title}
{news}
</div>
</body>
</html>

----------

$title='新闻标题';
$news='新闻内容';


现在要将{title}换成$title的内容,将{news}换成$news的内容.
如果变量少的话,可以用str_replace()函数直接替换.
代码:
<?php
$m=file_get_contents('m.htm');
$title='新闻标题';
$news='新闻内容';

$m=str_replace(array('{title}','{news}'),array($title,$news),$m);
$file=date('Ymdhis').'.htm';
if(file_put_contents($file,$m)){//生成静态页面
        echo '已经生成'.$file;
}

?>
如果变量较多,需要使用正则动态替换.
代码:
<?php
$m=file_get_contents('m.htm');
$title='新闻标题';
$news='新闻内容';
//……,还可以添加更多,在模板中也类似添加。
$preg="/{(.*)}/iU";
$n=preg_match_all($preg,$m,$rs);
$rs=$rs[1];
if($n>0){
        foreach($rs as $v){
                if(isset($$v)){
                        $oArr[]='{'.$v.'}';
                        $tArr[]=$$v;
                        $m=str_replace($oArr,$tArr,$m);
                }
        }
}
$file=date('Ymdhis').'.htm';
if(file_put_contents($file,$m)){//生成静态页面
        echo '已经生成'.$file;
}
?>

手机版|轻松E站

GMT+8, 2024/11/21 16:33

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