一行代码实现URI转换器

C 2018-5-31 6298

目前在做CMS内核,期间遇到一个有趣的问题,值得记录一下。

以日志页网址为例:http://localhost/topic?btime=1526807260&btid=2554

其中固定路由为:http://localhost/topic,配置变量为:?btime=1526807260&btid=2554

某些页面我想改变其中的一个参数,例如将btime调整为100,其余参数不变,生成新的URI地址。

目前常见的解决方法为将$_GET数组复制,变更其中某个参数,然后循环生成新的URI,类似于:

function uridis($act,$val){
$arr=$_GET;
$arr[$act]=$val;
$uri='';
foreach($arr as $key=>$row){$uri.='&'.$key.'='.$row;}
return $uri;
}

这种方法每调用一次函数就要复制一次$_GET数组,经历一次循环,效率非常低,还占用内存。

于是我修改为使用str_replace进行数组替换:

function uridis($act,$val){return trim(str_replace('&'.$act.'='.$_GET[$act].'&','&'.$act.'='.$val.'&','&'.$_SERVER['QUERY_STRING'].'&'),'&');

完善了一个正则表达式:

function uridis($act,$val){return preg_replace('/(^|&)'.$act.'\=(?:.*?)($|&)/i','\1'.$act.'='.$val.'\2',$_SERVER['QUERY_STRING']);
最新回复 (0)
返回
发新帖