쿼리 문자열을 배열로 구문 분석
아래 문자열을 배열로 변환하려면 어떻게 해야 합니까?
pg_id=2&parent_id=2&document&video
이게 제가 찾고 있는 어레이입니다.
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
함수를 사용하려면 두 번째 매개 변수를 설정하여 개별 변수가 아닌 배열에 데이터를 넣어야 합니다.
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
가끔씩parse_str()
참고만 정확하면 다음과 같이 표시될 수 있습니다.
$url = "somepage?id=123&lang=gr&size=300";
parse_str()는 다음을 반환합니다.
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
결합하는 것이 좋을 것이다.parse_str()
와 함께parse_url()
다음과 같이 합니다.
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
사용.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
부호화된 앰퍼샌드로 인해 쿼리 문자열을 배열로 변환하는 데 문제가 있는 경우
&
그럼 꼭 사용하세요html_entity_decode
예:
// Input string //
$input = 'pg_id=2&parent_id=2&document&video';
// Parse //
parse_str(html_entity_decode($input), $out);
// Output of $out //
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
http://us1.php.net/parse_str 를 사용합니다.
주의: 사용법은 다음과 같습니다.
parse_str($str, &$array);
것은 아니다.
$array = parse_str($str);
위의 내용은 PHP 버전 5.3 이전에만 적용됩니다.PHP 5.4에서는 참조에 의한 콜 시간이 삭제되었습니다.
몇 가지 방법이 있지만, 이미 내장된 기능이 있습니다.
$array = array();
parse_str($string, $array);
var_dump($array);
이것은 현재 URL에서 어레이로 쿼리를 해석하기 위한 한 줄입니다.
parse_str($_SERVER['QUERY_STRING'], $query);
PHP 문자열 함수를 사용할 수 있습니다.parse_str()
이어서foreach
고리.
$str="pg_id=2&parent_id=2&document&video";
parse_str($str,$my_arr);
foreach($my_arr as $key=>$value){
echo "$key => $value<br>";
}
print_r($my_arr);
다음 코드를 사용해 볼 수 있습니다.
<?php
$str = "pg_id=2&parent_id=2&document&video";
$array = array();
parse_str($str, $array);
print_r($array);
?>
출력:
Array
(
[pg_id] => 2
[parent_id] => 2
[document] =>
[video] =>
)
그러나 PHP에는 $_GET 기능이 이미 포함되어 있습니다.그러면 어레이가 자동으로 변환됩니다.
해라print_r($_GET)
같은 결과를 얻을 수 있습니다.
MySQL과 SQL Server에서 쿼리를 분할하기 위한 PHP 코드입니다.
function splitquery($strquery)
{
$arrquery = explode('select', $strquery);
$stry = ''; $strx = '';
for($i=0; $i<count($arrquery); $i++)
{
if($i == 1)
{
echo 'select ' . trim($arrquery[$i]);
}
elseif($i > 1)
{
$strx = trim($arrquery[($i-1)]);
if(trim(substr($strx,-1)) != '(')
{
$stry = $stry . '
select ' . trim($arrquery[$i]);
}
else
{
$stry = $stry.trim('select ' . trim($arrquery[$i]));
}
$strx = '';
}
}
return $stry;
}
예:
이전 쿼리
Select xx from xx select xx,(select xx) from xx where y=' cc'
select xx from xx left join (select xx) where (select top 1 xxx from xxx) oder by xxx desc";
다음 날짜 이후 쿼리
select xx from xx
select xx,(select xx) from xx where y=' cc'
select xx from xx left join (select xx) where (select top 1 xxx from xxx) oder by xxx desc
이 질문에 대해 선택한 답변은 맞지만 URL에 추가 "e"와 같은 중복 파라미터가 있는 경우 오류 또는 예외가 발생하지 않고 함수는 자동으로 실패합니다.
a=2&b=2&c=5&d=4&e=1&e=2&e=3
따라서 다음과 같이 나만의 파서를 사용하는 것이 좋습니다.
//$_SERVER['QUERY_STRING'] = `a=2&b=2&c=5&d=4&e=100&e=200&e=300`
$url_qry_str = explode('&', $_SERVER['QUERY_STRING']);
//arrays that will hold the values from the url
$a_arr = $b_arr = $c_arr = $d_arr = $e_arr = array();
foreach( $url_qry_str as $param )
{
$var = explode('=', $param, 2);
if($var[0]=="a") $a_arr[]=$var[1];
if($var[0]=="b") $b_arr[]=$var[1];
if($var[0]=="c") $c_arr[]=$var[1];
if($var[0]=="d") $d_arr[]=$var[1];
if($var[0]=="e") $e_arr[]=$var[1];
}
var_dump($e_arr);
// will return :
//array(3) { [0]=> string(1) "100" [1]=> string(1) "200" [2]=> string(1) "300" }
이제 각 매개 변수가 자체 배열에 모두 포함되므로 원하는 경우 언제든지 각 매개 변수를 하나의 배열로 병합할 수 있습니다.
도움이 됐으면 좋겠네요!
언급URL : https://stackoverflow.com/questions/5397726/parse-query-string-into-an-array
'source' 카테고리의 다른 글
VueJ의 1개의 컴포넌트에서 모든 이벤트를 어떻게 듣습니까? (0) | 2022.11.15 |
---|---|
java.exe와 javaw의 차이.실행 (0) | 2022.11.15 |
Mysql 쿼리 결과를 Excel로 내보내시겠습니까? (0) | 2022.11.15 |
MySQL의 "주요 효율성"이란 (0) | 2022.11.14 |
계산 필드를 vuex-map-fields로 매핑합니다. (0) | 2022.11.14 |