拆分 URI 查询字符串,就像它们是过滤器一样 ?title=php_filter&size>2&author!=smith
Split URI query string like they are filters ?title=php_filter&size>2&author!=smith
我的 google-fu 今天让我失望了。我正在寻找解析这样的查询字符串:
https://example.com/some/path/here?title=my_title&size>2&author!=smith
我希望将查询字符串解析为:
array(3) {
["title"]=>
array(2) {
["operator"]=>
string(1) "="
["search"]=>
string(8) "my_title"
}
["size"]=>
array(2) {
["operator"]=>
string(1) ">"
["search"]=>
string(1) "2"
}
["author"]=>
array(2) {
["operator"]=>
string(2) "!="
["search"]=>
string(5) "smith"
}
}
可能的运算符大多是标准的 php:==、!=、<>、>、<、>=、<=
关于解析这个的任何指示?谢谢
编辑 1: 谢谢 Armin Sam。我原来的 URL 需要一个 urldecode 扔在那里,但除此之外,它工作正常。
function parseURLAsFilters($url) {
$url = urldecode($url);
$result = [];
$queries = explode('&', parse_url($url, PHP_URL_QUERY));
$pattern = '/(==|=|>=|<=|<>|<|>|!=)/';
foreach ($queries as $query) {
$queryArray = preg_split($pattern, $query, -1, PREG_SPLIT_DELIM_CAPTURE);
$result[$queryArray[0]] = [
'operator' => $queryArray[1],
'search' => $queryArray[2]
];
}
return $result;
}
PS:我试着给你的答案投赞成票,但我的排名不够高,无法让分数生效。
我编写了一个函数,可能会为您提供所需的结果。我还没有测试过,所以可能会有一些小问题,我相信你可以解决。
function parseUrl($url) {
$result = [];
$queries = explode('&', parse_url($url, PHP_URL_QUERY));
$pattern = '/(==|=|>=|<=|<>|<|>|!=)/';
foreach ($queries as $query) {
$queryArray = preg_split($pattern, $query, -1, PREG_SPLIT_DELIM_CAPTURE);
$result[$queryArray[0]] = [
'operator' => $queryArray[1],
'search' => $queryArray[2]
];
}
return $result;
}
我的 google-fu 今天让我失望了。我正在寻找解析这样的查询字符串:
https://example.com/some/path/here?title=my_title&size>2&author!=smith
我希望将查询字符串解析为:
array(3) {
["title"]=>
array(2) {
["operator"]=>
string(1) "="
["search"]=>
string(8) "my_title"
}
["size"]=>
array(2) {
["operator"]=>
string(1) ">"
["search"]=>
string(1) "2"
}
["author"]=>
array(2) {
["operator"]=>
string(2) "!="
["search"]=>
string(5) "smith"
}
}
可能的运算符大多是标准的 php:==、!=、<>、>、<、>=、<=
关于解析这个的任何指示?谢谢
编辑 1: 谢谢 Armin Sam。我原来的 URL 需要一个 urldecode 扔在那里,但除此之外,它工作正常。
function parseURLAsFilters($url) {
$url = urldecode($url);
$result = [];
$queries = explode('&', parse_url($url, PHP_URL_QUERY));
$pattern = '/(==|=|>=|<=|<>|<|>|!=)/';
foreach ($queries as $query) {
$queryArray = preg_split($pattern, $query, -1, PREG_SPLIT_DELIM_CAPTURE);
$result[$queryArray[0]] = [
'operator' => $queryArray[1],
'search' => $queryArray[2]
];
}
return $result;
}
PS:我试着给你的答案投赞成票,但我的排名不够高,无法让分数生效。
我编写了一个函数,可能会为您提供所需的结果。我还没有测试过,所以可能会有一些小问题,我相信你可以解决。
function parseUrl($url) {
$result = [];
$queries = explode('&', parse_url($url, PHP_URL_QUERY));
$pattern = '/(==|=|>=|<=|<>|<|>|!=)/';
foreach ($queries as $query) {
$queryArray = preg_split($pattern, $query, -1, PREG_SPLIT_DELIM_CAPTURE);
$result[$queryArray[0]] = [
'operator' => $queryArray[1],
'search' => $queryArray[2]
];
}
return $result;
}