| 제목 | 주소 세그먼트 -> 배열변환 함수 | ||
|---|---|---|---|
| 글쓴이 | 변종원(웅파) | 작성시각 | 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
|
좋은 팁 ~~ 감사합니다.