PHPSnippets

$_SERVER[QUERY_STRING] 특정 파라미터 삭제 출력하기

PHP의 $_SERVER[QUERY_STRING]를 이용하여 Get 방식의 Method 처리를 할 경우 특정 파라미터를 제거하거나 추가해 줘야 하는 경우가 있다.
보통 게시판의 페이징 작업을 할 때 주로 사용되는데, 동일한 Query String 문자열에서 페이징에 해당하는 page 값만 제거하고 다시 붙여넣고 싶을 때 사용하면 좋다.

class MakeQueryString {
    // 배열로 넘어온 값을 get 형식으로 변경
    function pack($params, $name=null) {
        $ret = "";
        foreach($params as $key=>$val) {
            if(is_array($val)) {
                if($name==null) $ret .= $this->pack($val, $key);
                else $ret .= $this->pack($val, $name."[$key]");
            } else {
                if($name!=null) $ret .= $name."[]"."=$val&";
                else $ret .= "$key=$val&";
            }
        }

        return $ret;
    }

    // $this->unpack($_SERVER[QUERY_STRING], "제외할 파라미터 복수의 파라미터는 (,)를 구분자로 사용");
    function unpack($querystring, $exception="") {
        $exception = preg_replace("/[\s]+/", "", $exception);
        if($exception) {
            parse_str($querystring, $qs);
            $newqs = Array();
            foreach($qs AS $k => $v) {
                if(array_search($k, preg_split("/,/", $exception)) === false) {
                    $newqs[$k] = $v;
                }
            }
            return $this->pack($newqs);
        } else {
            return $querystring;
        }
    }
}

// 예제
// 쿼리스트링 가져오기
$_cls_mkqs = new MakeQueryString();
$get_query_string = $_cls_mkqs->pack($_GET);
$get_query_string = $_cls_mkqs->unpack($get_query_string, "x,y");