2012-12-09 22 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]; 
}