鍍金池/ 問(wèn)答/Java  PHP  Python/ PHP如何輕量實(shí)現(xiàn)URI變量匹配及修改?

PHP如何輕量實(shí)現(xiàn)URI變量匹配及修改?

如題,例如我有一個(gè)地址:
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文件中調(diào)用:

uridis('abc',456);

如果這樣實(shí)現(xiàn)的話,正則表達(dá)式會(huì)占用387KB左右的內(nèi)存。
而使用str_replace進(jìn)行替換:

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

則占用的內(nèi)存更多,大概392KB左右。循環(huán)$_GET更不用想,根本沒(méi)法看。
因?yàn)槲以陧?yè)面中需要生成大概幾十個(gè)替換后的URI,程序效率需求非常高。
所以請(qǐng)教各位有沒(méi)有更加輕量的解決方案?非常感謝!

回答
編輯回答
情殺
function uridis($act,$val){
    $get=$_GET;
    $get[$act] = $val;
    return http_build_query($get);
}

才幾十個(gè)替換而已,不用考慮性能

2017年8月19日 14:40