Відповіді:
Ви хочете parse_str
функцію, і вам потрібно встановити другий параметр, щоб дані містилися в масиві замість окремих змінних.
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
?key=lorem&key=ipsum
як якщо б ви вказали лише key=ipsum
те, що це рядок запиту в URL-адресі. І я думаю, що вважати недійсним повторне використання ключа та очікування послідовних результатів або збереження всіх примірників ключа. Дійсний підхід, принаймні для рядка запиту, надісланого PHP, ?key[]=lorem&key[]=ipsum
таким чином, ваш підхід до дому може шукати будь-які випадки, &{x}=
коли x виникає не один раз, і замінити на x[]
(і лікувати? Як те саме, що &)
?key[]=lorem&key[]=ipsum
кілька тижнів тому. Але дякую за те, що поділилися посиланням!
Іноді 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 );
$_SERVER['QUERY_STRING']
Використання parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Використовуйте http://us1.php.net/parse_str
Увага, це використання:
parse_str($str, &$array);
ні
$array = parse_str($str);
Якщо у вас виникають проблеми з перетворенням рядка запиту в масив через закодовані амперсанди
&
то обов'язково використовуйте 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' =>
)
Існує кілька можливих методів, але для вас вже є вбудована parse_str
функція
$array = array();
parse_str($string, $array);
var_dump($array);
Це код PHP для розділення запиту на mysql & 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;
}
Приклад:
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 ";
виберіть xx з xx
виберіть xx, (виберіть xx) з xx, де y = 'cc'
виберіть xx з xx зліва приєднатися (виберіть xx) де (виберіть верхній 1 xxx з xxx) oder від xxx desc
Дякую, з Індонезії Sentrapedagang.com
Для цього конкретного запитання обрана відповідь правильна, але якщо є надлишковий параметр, як-от додаткове "е", в URL-адресі функція буде мовчазно відмовлятись без помилки чи винятку:
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" }
Тепер у вас є всі входження кожного параметра у власному масиві, ви завжди можете їх об'єднати в один масив, якщо хочете.
Сподіваюся, що це допомагає!
?key=lorem&key=ipsum
, результат призведе доarray(["key"]=>"ipsum")
питання, чи є функція отримати s.th. подобається цеarray(["key"]=>array("lorem", "ipsum"))
чи мені потрібно створити цю функцію самостійно?