我可以根据url路径生成数组吗?

时间:2011-03-25 13:58:52

标签: php

我有一条路:

/博客/ 2 /后/ 45 /评论/ 24

我可以拥有一个数组取决于我在url上的内容,例如:

$arr = array('blog'=>'2','post'=>'45','comment'=>'24');

但它应该取决于传递的变量:

/blog/2 should produce $arr = array('blog'=>'2');

这可以创建动态数组吗?

4 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

function path2hash($path) {
  // $path contains whatever you want to split
  $chunks = explode('/', $path);

  $result = array();
  for ($i = 0; $i < sizeof($chunks) - 1; $i+=2)
    $result[$chunks[$i]] = $chunks[$i+1];

  return $result;
}

然后您可以使用parse_url来提取路径,并使用此函数将其转换为所需的哈希值。

答案 1 :(得分:0)

首先使用$_SERVER['REQUEST_URI']查找当前路径。

现在,您可以使用explode和其他字符串函数来生成数组...

如果你需要一个有效的例子,我会试着发一个。

编辑:

$path=explode('/',$path);

$arr=array(
$path[0]=>$path[1],
$path[1]=>$path[2]);

或者不知道它有多久......

$arr=array();
for ($i=0; $i+1<count($path);i+=2)
$arr[$path[$i]]=$path[$i+1];

答案 2 :(得分:0)

这是一个试图解决问题的简单示例。这将把参数放在“arguments”数组中,并将包含数组中键/值的每个组合。如果有一个奇数个参数,最后一个元素将被忽略。

这使用array_shift()从数组中删除第一个元素,然后将其用作arguments数组中的键。然后我们从数组中删除下一个元素,然后再使用array_shift()。如果我们在这里找到一个实际值(当数组为空时,array_shift返回NULL),我们在arguments数组中创建一个条目。

$path = '/blog/2/post/45/comment/24';
$elements = explode('/', $path);

// remove first, empty element
array_shift($elements);
$arguments = array();

while($key = array_shift($elements))
{
    $value = array_shift($elements);

    if ($value !== NULL)
    {
        $arguments[$key] = $value;    
    }
}

答案 3 :(得分:-2)

本身并非真正的答案,但您可能会发现http://www.php.net/manual/en/function.parse-url.php有用。