拆分 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; 
}