2012-12-09 26 views
3

來的頁面的URL看起來是這樣的:PHP - 獲取URL參數重新排列陣列

的「http://本地主機/測試網站/ ID/1/friend_id/32/MSG_ID/5/CATEGORY_ID/40"

我想剝離這些變量(ID/1friend_id/32MSG_ID/5等)和使它們成爲一個這樣的數組:

$params = array('id' => 1, 'friend_id' => 32, 'msg_id' => 5, 'category_id' => 40) 

這樣我可以像這樣訪問這些值:

$params['id']; $params['friend_id']; 

我以爲我在某處使用下面的代碼,但它沒有太大的幫助。

$keys = explode('/', $url); 
    $k2 = $keys; 
    $result = array(); 

    foreach ($keys as $k => $v) { 
     $result[$v] = next($k2); 
    } 
    array_pop($result); 
    print_r($result); 

我會得到從上面的代碼的輸出如下:

Array 
(
    [id] => 1 
    [1] => friend_id 
    [friend_id] => 32 
    [32] => msg_id 
    [msg_id] => 5 
    [5] => category_id 
    [category_id] => 40 
) 

有沒有人這樣做之前?我如何修改上面的代碼以使其正常工作?或者有沒有人有關於如何做到這一點的其他想法?

我真的很感謝任何幫助, 謝謝!

+0

有你爲什麼不使用URI參數的原因是什麼?即:'http:// localhost/testSite?id = 1&friend_id = 32&msg_id = 5&category_id = 40'這個數組只是'$ _GET'或'$ _REQUEST' – cegfault

+0

@cegfault不,沒有什麼特別的理由。我只是試驗mod_rewrite和PHP。 – user1302430

+0

如果您想在HTTPD級別執行此操作,請在.htaccess中進行,而不是重寫url,您可以將其保留爲原樣並將其加載到Apache環境變量中(http://httpd.apache.org/docs/2.2/ env.html),它將在$ _SERVER(http://php.net/manual/en/function.getenv.php)超全局中可用。 – jacob

回答

2

如果這是由框架完成的,應該有辦法獲取參數。在這種情況下查看文檔。

否則,你可以使用簡單的正則表達式來解析它。這個想法是使用定義一個前綴(代碼中的$root)。

$url = 'http://localhost/testSite/id/1/friend_id/32/msg_id/5/category_id/40'; 
$root = 'http://localhost/testSite/'; 
$params = substr($url, strlen($root)); 
preg_match_all("#([^/]+)/([^/]+)#", $params, $match); 
$result = array_combine($match[1], $match[2]); 
0
$parts = explode('/', $url); 
$len = count($parts); 
$result = array(); 
for ($i = 0; $i < $len; $i+=2) { 
    $result[$parts[$i]] = $parts[$i+1]; 
}