Odpowiedzi:
Chcesz tę parse_str
funkcję i musisz ustawić drugi parametr, aby dane były umieszczane w tablicy zamiast w poszczególnych zmiennych.
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
?key=lorem&key=ipsum
tak, jakbyś podał tylko, key=ipsum
jeśli byłby to ciąg zapytania w adresie URL. I myślę, że ponowne użycie klucza i uznanie za spójne wyniki lub że wszystkie wystąpienia klucza zostaną zachowane, jest uważane za nieprawidłowe. Prawidłowe podejście, przynajmniej dla ciągu zapytania wysłanego do PHP, byłoby takie ?key[]=lorem&key[]=ipsum
, więc twoje własne podejście może szukać wszelkich przypadków, w &{x}=
których x występuje więcej niż jeden raz i zastąpić x[]
(i traktować? Tak samo jak &)
?key[]=lorem&key[]=ipsum
Kilka tygodni temu postanowiłem zrobić to w ten sposób . Ale dziękuję za udostępnienie linku!
Czasami parse_str()
sam jest dokładny, może wyświetlać na przykład:
$url = "somepage?id=123&lang=gr&size=300";
parse_str () zwróci:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
Lepiej byłoby połączyć parse_str()
z parse_url()
:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
$_SERVER['QUERY_STRING']
Korzystanie parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Użyj http://us1.php.net/parse_str
Uwaga, jego użycie to:
parse_str($str, &$array);
nie
$array = parse_str($str);
Jeśli masz problem z konwersją ciągu zapytania na tablicę z powodu zakodowanych znaków ampersands
&
następnie użyj html_entity_decode
Przykład:
// 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' =>
)
Istnieje kilka możliwych metod, ale dla ciebie jest już wbudowana parse_str
funkcja
$array = array();
parse_str($string, $array);
var_dump($array);
To jest kod PHP do dzielenia zapytania w mysql i mssql
enter code here
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;
}
Przykład:
wybierz xx od xx wybierz xx, (wybierz xx) od xx gdzie y = 'cc' wybierz xx od xx lewy dołącz (wybierz xx) gdzie (wybierz top 1 xxx od xxx) lub oder przez xxx desc ";
wybierz xx z xx
wybierz xx, (wybierz xx) z xx gdzie y = „cc”
wybierz xx od xx lewe dołącz (wybierz xx) gdzie (wybierz top 1 xxx od xxx) lub oder przez xxx desc
Dziękuję, z Indonezji Sentrapedagang.com
W przypadku tego konkretnego pytania wybrana odpowiedź jest prawidłowa, ale jeśli w adresie URL znajduje się nadmiarowy parametr - taki jak dodatkowe „e” - funkcja po cichu zawiedzie bez zgłoszenia błędu lub wyjątku:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Wolę więc używać własnego parsera:
//$_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" }
Teraz masz wszystkie wystąpienia każdego parametru we własnej tablicy, zawsze możesz je scalić w jedną tablicę, jeśli chcesz.
Mam nadzieję, że to pomaga!
?key=lorem&key=ipsum
rezultacie powstaniearray(["key"]=>"ipsum")
pytanie: czy istnieje funkcja pozwalająca uzyskać s.th. lubię to,array(["key"]=>array("lorem", "ipsum"))
czy muszę samodzielnie utworzyć tę funkcję?