一行代码实现URI转换器 目前在做CMS内核,期 - Assbbs
一行代码实现URI转换器 目前在做CMS内核,期间遇到一个有趣的问题,值得记录一下。 以日志页网址为例:http://localhost/topic?btime=1526807260&btid=2554 其中固定路由为:http://localhost/topic,配置变量为:?btime=1526807260&btid=2554 某些页面我…
一行代码实现URI转换器 目前在做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=& 39;& 39;; foreach $arr as $key=>$row {$uri.=& 39;&& 39;.$key.& 39;=& 39;.$row;} return $uri; } 这种方法每调用一次函数就要复制一次$ GET数组,经历一次循环,效率非常低,还占用内存。 于是我修改为使用str replace进行数组替换: function uridis $act,$val {return trim str replace & 39;&& 39;.$act.& 39;=& 39;.$ GET $act .& 39;&& 39;,& 39;&& 39;.$act.& 39;=& 39;.$val.& 39;&& 39;,& 39;&& 39;.$ SERVER & 39;QUERY STRING& 39; .& 39;&& 39; ,& 39;&& 39; ; 完善了一个正则表达式: function uridis $act,$val {return preg replace & 39;/ ^|& & 39;.$act.& 39;\= ?:. ? $|& /i& 39;,& 39;\1& 39;.$act.& 39;=& 39;.$val.& 39;\2& 39;,$ SERVER & 39;QUERY STRING& 39; ;