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

Posted

技术标签:

【中文标题】PHP - 获取 URL 参数并在数组中重新排列【英文标题】:PHP - Get URL Parameters and Rearrange In Array 【发布时间】:2012-11-26 20:02:36 【问题描述】:

进入页面的 URL 如下所示:

“http://localhost/testSite/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
)

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

非常感谢任何帮助, 谢谢!

【问题讨论】:

不使用 uri 参数有什么原因吗?即:http://localhost/testSite?id=1&friend_id=32&msg_id=5&category_id=40 这个数组就在$_GET$_REQUEST @cegfault 不,没有任何特殊原因。我只是在试验 mod_rewrite 和 php 如果您想在 HTTPD 级别执行此操作,在 .htaccess 中而不是重写 url,您可以保持原样并将其加载到 Apache 环境变量 (httpd.apache.org/docs/2.2/env.html) 中,这将是在 $_SERVER (php.net/manual/en/function.getenv.php) 超全局中可用。 【参考方案1】:

如果这是由框架完成的,则应该有获取参数的方法。在这种情况下,请参阅文档。

否则你可以使用简单的正则表达式来解析它。这个想法是使用定义一个前缀(代码中的$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]);

【讨论】:

【参考方案2】:
$parts = explode('/', $url);
$len = count($parts);
$result = array();
for ($i = 0; $i < $len; $i+=2) 
  $result[$parts[$i]] = $parts[$i+1];

【讨论】:

以上是关于PHP - 获取 URL 参数并在数组中重新排列的主要内容,如果未能解决你的问题,请参考以下文章

php 当参数不固定时

使用 CodeIgniter 获取 URL 中的参数

php 获取URL 各部分参数

php的内置函数array_values()重置数组信息,数组K值有0开始重新排列

PHP URL 传参判断

PHP如何对一组数进行重新排列(冒泡算法)