제목 | 주소 세그먼트 -> 배열변환 함수 | ||
---|---|---|---|
글쓴이 | 변종원(웅파) | 작성시각 | 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]; } } } |
|||
다음글 | 공개된 포럼 소스를 lighttpd에 설치할 때 .ht... (5) | ||
이전글 | 오류 몇가지 (3) | ||
ci세상
/
2009/10/28 15:01:31 /
추천
0
|
SADBLUE
/
2009/10/28 15:34:28 /
추천
0
음..왜 저는 explode 생각을 못했을 까요-_-;
재귀 호출 하면서 배열 변수에 push하는 함수를 맹가서 쓰고 있는데.;; 갑자기 바꾸고 싶어지네요.-ㅅ-; |
변종원(웅파)
/
2009/10/29 15:49:20 /
추천
0
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 /
추천
0
|
좋은 팁 ~~ 감사합니다.