PHP如何轻量实现URI变量匹配及修改?

LowB
  • 231

如题,例如我有一个地址:
abc.com/?abc=123&xyz=987
我想把其中的abc变量修改为456,其他变量维持原状,返回新的URI地址。
目前使用的方法是正则匹配:

function uridis($act,$val){return preg_replace('/(^|&)'.$act.'\=(?:.*?)($|&)/i','\1'.$act.'='.$val.'\2',$_SERVER['QUERY_STRING']);}

在PHP文件中调用:

uridis('abc',456);

如果这样实现的话,正则表达式会占用387KB左右的内存。
而使用str_replace进行替换:

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

则占用的内存更多,大概392KB左右。循环$_GET更不用想,根本没法看。
因为我在页面中需要生成大概几十个替换后的URI,程序效率需求非常高。
所以请教各位有没有更加轻量的解决方案?非常感谢!

回复
阅读 1.5k
1 个回答
function uridis($act,$val){
    $get=$_GET;
    $get[$act] = $val;
    return http_build_query($get);
}

才几十个替换而已,不用考虑性能

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏