代码之家  ›  专栏  ›  技术社区  ›  Sandeepan Nath

正在处理URL参数-用斜杠分隔的名称-值对

  •  3
  • Sandeepan Nath  · 技术社区  · 15 年前

    URL 1 -    www.projectname/module/search/param/1
    URL 2 -    www.projectname/param/1/module/search
    

    我想要一个PHP代码,它以上面的url作为参数,并返回一个数组,如

    Array("module" => "search", "param" => 1) (for URL 1)
    Array("param" => 1, "module" => "search") (for URL 2)
    

    这样我就可以把结果用在我的项目中。我开始知道,用PHP做这件事比用htaccess重写规则更好更容易。如果你能帮助重写规则也请帮助。

    可以有任意数量的参数。

    我从CodeIgniter的URL处理库中得到了这个想法。但是我的项目不在Codeigniter上,所以我不能使用那个库。有没有独立的代码?

    4 回复  |  直到 15 年前
        1
  •  5
  •   Georg Schölly Crazy Developer    14 年前

    这里有一个函数来完成这项工作。请注意,我已经填写了url,如下所示 parse_url 我需要这个计划。对于格式严重错误的url,它也会失败。

    function get_dispatch($url) {
        // Split the URL into its constituent parts.
        $parse = parse_url($url);
    
        // Remove the leading forward slash, if there is one.
        $path = ltrim($parse['path'], '/');
    
        // Put each element into an array.
        $elements = explode('/', $path);
    
        // Create a new empty array.
        $args = array();
    
        // Loop through each pair of elements.
        for( $i = 0; $i < count($elements); $i = $i + 2) {
            $args[$elements[$i]] = $elements[$i + 1];
        }
    
        return $args;
    }
    
    print_r(get_dispatch('http://www.projectname.com/module/search/param/1'));
    print_r(get_dispatch('http://www.projectname.com/param/1/module/search'));
    

    Array
    (
        [module] => search
        [param] => 1
    )
    Array
    (
        [param] => 1
        [module] => search
    )
    

    然而,这可能不是很可靠。如果有一个写得很好的图书馆已经完成了这项工作(就像Itay Moav建议的那样),那么你一定要去研究它。

        2
  •  0
  •   Elzo Valugi    15 年前

    explode 1

    $result = explode('/', $string);
    
        3
  •  0
  •   Lizard    15 年前

    使用PHP函数 parse_url http://php.net/manual/en/function.parse-url.php

    $url = 'http://username:password@hostname/path?arg=value#anchor';
    
    print_r(parse_url($url));
    
    Array
    (
        [scheme] => http
        [host] => hostname
        [user] => username
        [pass] => password
        [path] => /path
        [query] => arg=value
        [fragment] => anchor
    )
    

    所以你可以分析 path 数组的部分。

    explode 将项目放入关联数组?

        4
  •  0
  •   Community CDub    5 年前
    $url    = parse_url('http://www.projectname.com/module/search/param/1');
    $params = explode('/', trim($url['path'], '/'));
    $params = array_chunk($params, 2); //tricky part here
    foreach($params as $param)
    {
        $final_params[$param[0]] = $param[1];
    }
    

    array_chunk