2016-11-22 7 views
0

google-fu는 오늘 실패합니다. == : 가능한 사업자는 대부분 표준 PHP는 것들입니다분할 URI 쿼리 문자열은 필터처럼 사용합니까? title = php_filter & 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" 
    } 
} 

: 나는에 쿼리 문자열을 구문 분석을 찾고 있어요

https://example.com/some/path/here?title=my_title&size>2&author!=smith 

: 내가 좋아하는 쿼리 고통을 구문 분석 찾고 있어요 ! =, <>,>, <,> =, < =

이 구문 분석을위한 모든 포인터는 무엇입니까? 감사.

편집 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 : I가 답변을 투표를했지만, 나는이 점을 적용하기에 충분히 높은 순위 아니에요.

+0

PHP 전역 전역 변수 $ _GET, $ _REQUEST를 사용하십시오. 또한 연산자는 url에 전달되지 않고 변수 만 전달하고 논리는 implode하고 PHP는 폭발합니다. –

+0

전체 쿼리 문자열을 가져 오는 데 문제가 없습니다. Im은 그것을 단지 등호가 아니라 ... 가능한 구분 기호의 목록으로 주어진 배열로 파싱합니다. – Mitch

+0

그것이 내가 말한 것입니다. url ($ _GET)에 연산자 (==,! =, <>,>, <, > =, <=)를 전달할 수 없습니다. 귀하의 데이터를 전달하기 위해 다른 수단을 사용하십시오. 직렬화() 데이터를 $ _POST로 전달하는 것은 어떻습니까? –

답변

1

나는 당신이 찾고있는 결과를 얻을 수있는 함수를 작성했습니다. 나는 그것을 테스트하지 않았으므로 당신이 고칠 수있는 몇 가지 작은 문제가있을 수 있습니다.

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; 
} 
+0

가 '$ 결과가 누락 $의 signg있다 [queryArray는 [0]] = [ '연산자 '=> queryArray [1] '검색 '는 [2] queryArray> =]' – vstelmakh

+0

참으로 I 눈치 . 답변을 업데이트 했으므로 다시 시도 할 수 있습니다. –

+0

이제 완벽하게 작동합니다. – vstelmakh