CodeIgniter 한국사용자포럼 BETA
빠르고, 유연한 PHP Framework!

TIP게시판


주소 세그먼트 -> 배열변환 함수      
웅파 4 5,485 0 0 2009-10-28 13:21:33
주소가  http://hbuilder.com/first/product0/third/lists/page/1/?q=nos&nn=3 일 경우(쿼리스트링이 있을 경우)

Array ( [0] => first [1] => product0 [2] => third [3] => lists [4] => page [5] => 1 [6] => q [7] => nos [8] => nn [9] => 3 )
형태로 반환을 해줍니다.

일반적인 형태의 주소뿐만 아니라 쿼리스트링까지 들어있는 경우도 처리가 가능하도록 했습니다.

function segment_explode($seg) { //세크먼트 앞뒤 '/' 제거후 uri를 배열로 반환
	$len = strlen($seg);
	if(substr($seg, 0, 1) == '/') {
		$seg = substr($seg, 1, $len);
	}
	$len = strlen($seg);
	if(substr($seg, -1) == '/') {
		$seg = substr($seg, 0, $len-1);
	}
	$seg_exp1 = explode("/", $seg);

        //쿼리스트링을 $seg_ext와 동일한 형태의 배열로 반환
        if($_SERVER["QUERY_STRING"]){
            $s_arr=array();
            $strings = explode("&", $_SERVER["QUERY_STRING"]);
            foreach ($strings as $strs) {
                $a_arr = explode("=", $strs);
                foreach ($a_arr as $atrs) {
                    array_push($s_arr, $atrs);
                }
            }
            //맨끝 쿼리스트링 제거
            array_pop($seg_exp1);
            //쿼리스트링을 제거한 배열과 쿼리스트링을 배열화한 것을 합쳐서 반환
            $seg_exp = array_merge($seg_exp1, $s_arr);
        } else {
            $seg_exp = $seg_exp1;
        }
	return $seg_exp;
}

참고로 기존 주소와 쿼리스트링의 복합적인 형태를 사용하시려면 config.php 파일에서

$config['uri_protocol']	= "AUTO"; //기본

$config['uri_protocol']	= "REQUEST_URI"; //쿼리스트링과 복합사용
uri_protocol을 AUTO 에서 REQUEST_URI 로 바꿔주시면 됩니다.


활용편

위와 같이 주소를 배열로 바꾸고 나서 쿼리스트링 또는 주소쌍에 대응하는 값을 가져오고자 할 경우
(page/1 또는 ?q=nos) 다음 함수를 호출하여 사용하면 됩니다.

echo url_explode($seg_ext, 'q');
결과는 nos 를 화면에 뿌려줍니다.

/**
* url중 키값을 구분하여 값을 가져오도록
* author 우기파파
* @param Array $url : segment_explode 한 url값
* @param String $key : 가져오려는 값의 key
* @return String $url[$k] : 리턴값
*/
function url_explode($url,$key){
	for($i=0; count($url)>$i; $i++ ){
		if($url[$i] ==$key){
			$k = $i+1;
			return $url[$k];
		}
	}
}


  목록  

ci세상 2009-10-28 15:01:31
  
쿼리스트링 추구하시는 분들께는 좋겠네요^^ 세그먼트만 있으면 segment_array() 이걸로 한방에 배열처리가 가능하지만요 ~~

좋은 팁 ~~ 감사합니다.
SADBLUE 2009-10-28 15:34:28
  
음..왜 저는 explode 생각을 못했을 까요-_-;
재귀 호출 하면서 배열 변수에 push하는 함수를 맹가서 쓰고 있는데.;;
갑자기 바꾸고 싶어지네요.-ㅅ-;

웅파 2009-10-29 15:49:20
  
        function segment_explode($seg) { //세크먼트 앞뒤 '/' 제거후 uri를 배열로 반환
		$len = strlen($seg);
		if(substr($seg, 0, 1) == '/') {
			$seg = substr($seg, 1, $len);
		}
		$len = strlen($seg);
		if(substr($seg, -1) == '/') {
			$seg = substr($seg, 0, $len-1);
		}
		$seg_exp1 = explode("/", $seg);

        //쿼리스트링을 key(query_string)로 하여 배열로 반환
        if($_SERVER["QUERY_STRING"]){
            $result=array();
            $strings = explode("&", $_SERVER["QUERY_STRING"]);
            foreach ($strings as $strs) {
                $a_arr = explode("=", $strs);
                $result = array_merge($result, array($a_arr[0]=>$a_arr[1]));
            }
            $d_arr = array('query_string'=>$result);
            //맨끝 쿼리스트링 제거
            array_pop($seg_exp1);
            //쿼리스트링을 제거한 배열과 쿼리스트링을 배열화한 것을 합쳐서 반환
            $seg_exp = array_merge($seg_exp1, $d_arr);
        } else {
            $seg_exp = $seg_exp1;
        }
        return $seg_exp;
	}
주소 http://hbuilder.com/product/product2/?a=1&b=2&c=3 를

Array (
[0] => product
[1] => product2
[query_string] => Array ( [a] => 1 [b] => 2 [c] => 3 )
)
형태로 반환.

쿼리스트링과 기존 주소를 구분할 필요가 있어서 수정했습니다.
이 함수를 쓰게 되면 ci주소 형식과 쿼리스트링을 구분하여 값을 가져다 쓸 수 있게되어
검색이나 페이징 등에서 자유롭게 주소를 활용할 수 있습니다.
winduwho 2009-11-21 12:45:51
  


만약 배열에 담는게 아니고
하위코드에서 그 변수를 직접 쓸거라면
? 이후의 쿼리스트링을 아래와 같이 해도..

parse_str($qs);
extract($qs);

번호 제   목 글쓴이 날짜 조회 추천수
862 form validation 에서 한글 체크 규칙 [3] sliplife 2012-05-14 89 0
859 간단한 웹페이지 캐쉬처리 라이브러리 (스마티 캐쉬 .. [2] sliplife 2012-05-10 145 0
855 워드프레스 + Codeigniter [4] 이현석 2012-05-07 209 0
850 CLI 모드로 실행할 때 로그파일 관련문제 [1] 사랑완샷 2012-04-09 262 0
848 Customization Pagination (페이.. [1] 얼짱짠군 2012-04-02 490 0
845 db library 에서 save_queries 옵.. [1] pithecus 2012-03-29 330 0
842 세션 분실 && 읽지못함 관련 팁...이 될 수 있.. [1] 밥아저씨 2012-03-10 643 0
836 Hook을 이용한 preload 이이지 구현에 대한.. [3] 핵잠함장 2012-02-22 572 0
833 CI_Cache_memcached 드라이버 버그 수정 [2] 한글이 2012-02-22 528 0
829 HMVC 5.4 & Template_ 타로구조 만들기 [2] 타로 2012-02-02 980 0
824 CI lang팩 -> Javascript lang팩 [4] KangMin 2012-01-25 772 0
823 anchor_popup 헬퍼 화면 정 가운데 띄우기.. [0] DJ구스 2012-01-17 652 0
822 [자바스크립트] 창을 화면 정중앙에 위치하게 계산하기 [1] 웅파 2012-01-11 680 0
815 hook에서 선언한 변수를 컨트롤러에서 사용하기 [2] 웅파 2011-12-27 853 0
812 mysql 부분적인 에러 핸들링 처리 [2] EziX 2011-12-20 856 0
811 컨트롤러 외부에서의 종료방법 [1] EziX 2011-12-20 682 0
809 icodekore sms 모듈 쓰는 분들 참고하세요.. [0] namGoos 2011-12-09 924 0
803 Upgrading from 2.0.3 to 2.1.0 [5] namGoos 2011-12-06 896 0
794 .svn 폴더 삭제 하기 [7] 불의회상 2011-11-30 1044 1
792 [1원] 윈도우서버+mssql 에서 CLI(Comm.. [2] 터프키드 2011-11-29 965 0