PHP - 获取URL参数并重新排列数组

时间:2012-12-09 00:32:48

标签: php arrays url url-routing url-parameters

进入该页面的URL如下所示:

“HTTP://本地主机/测试网站/ ID / 1 / friend_id / 32 / MSG_ID / 5 / CATEGORY_ID / 40”

我想剥离这些变量( id / 1 friend_id / 32 msg_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
)

以前有人这样做过吗?如何修改上面的代码以使其正常工作?或者有没有人对如何做到这一点有其他想法?

我真的很感激任何帮助, 谢谢!

2 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

$parts = explode('/', $url);
$len = count($parts);
$result = array();
for ($i = 0; $i < $len; $i+=2) {
  $result[$parts[$i]] = $parts[$i+1];
}