Вывести строку запроса в массив
Как преобразовать строку ниже в массив ?
pg_id=2&parent_id=2&document&video
Это массив, который я ищу,
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
Ответы
Ответ 1
Вам нужна функция parse_str
, и вам нужно установить второй параметр, чтобы данные помещались в массив, а не в отдельные переменные.
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
Ответ 2
Иногда 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 );
Ответ 3
Использование parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Ответ 4
Используйте http://us1.php.net/parse_str
Внимание, это использование:
parse_str($str, &$array);
не
$array = parse_str($str);
Ответ 5
Если у вас возникла проблема с преобразованием строки запроса в массив из-за кодированных амперсандов
&
тогда используйте 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' =>
)
Ответ 6
Существует несколько возможных методов, но для вас уже есть встроенная функция parse_str
$array = array();
parse_str($string, $array);
var_dump($array);
Ответ 7
Это однострочный синтаксический анализатор для анализа запроса из текущего URL-адреса в массив:
parse_str($_SERVER['QUERY_STRING'], $query);
Ответ 8
Вы можете использовать строчную функцию 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);
Ответ 9
Это код 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;
}
Пример:
Запрос перед
выберите xx из xx выберите xx, (выберите xx) из xx, где y = 'cc', выберите xx из xx, оставьте соединение (выберите xx), где (выберите топ 1 xxx из xxx) oder по xxx desc
";
Запрос после
выберите xx из xx
выберите xx, (выберите xx) из xx, где y = 'cc'
выберите xx из xx левого соединения (выберите xx), где (выберите топ 1 xxx из xxx) или xxx desc
Спасибо, из Индонезии Sentrapedagang.com
Ответ 10
В этом конкретном вопросе выбранный ответ правильный, но если имеется избыточный параметр - например, дополнительный "e" - в 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" }
Теперь у вас есть все вхождения каждого параметра в свой собственный массив, вы всегда можете объединить их в один массив, если хотите.
Надеюсь, что это поможет!