Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在处理URL参数-用斜杠分隔的名称-值对_Php_Url_Url Rewriting_Url Routing_Mod Rewrite - Fatal编程技术网

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

Php 正在处理URL参数-用斜杠分隔的名称-值对,php,url,url-rewriting,url-routing,mod-rewrite,Php,Url,Url Rewriting,Url Routing,Mod Rewrite,我希望有如下URL:- 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"

我希望有如下URL:-

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)
这样我就可以在项目中使用$u GET时的结果。我知道用PHP做这件事比用htaccess重写规则更好更容易。如果您可以帮助重写规则,也请帮助

可以有任意数量的参数

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


提前感谢

使用PHP函数
解析url

因此,您可以分析数组的
路径
部分

然后使用
explode
将项目放入关联数组?

使用php函数。您必须解析结果,并查看$result是否是应用程序中的有效模块,等等。解析器的逻辑应该属于您的应用程序。有人提到的Zend_路由器也做了同样的事情,它试图映射到现有的模块/控制器/操作,不管它有什么$request对象

$result = explode('/', $string);

这里有一个函数来完成这项工作。注意,我已经填写了url,因为
parse\uURL
需要该方案。对于格式严重错误的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'));
然而,这可能不是很可靠。如果有一个写得很好的图书馆已经完成了这项工作(就像Itay Moav所建议的那样),那么你肯定应该研究它

$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];
}
编辑:解析url仅适用于正确的url


是一个很好的函数:)

我相信Zend_Router(检查拼写错误)可以从ZF中分离出来并用于此目的。@Georg Schölly:谢谢您的编辑。我忘了l/trim可以去除其他字符。你真的应该感谢第一次编辑的匿名用户,我没有做太多更改。:)
Array
(
    [module] => search
    [param] => 1
)
Array
(
    [param] => 1
    [module] => search
)
$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];
}