Вывести строку запроса в массив

Как я могу превратить строку ниже в массив ?

pg_id=2&parent_id=2&document&video 

Это массив, который я ищу,

 array( 'pg_id' => 2, 'parent_id' => 2, 'document' => , 'video' => ) 

Вам нужна функция parse_str , и вам нужно установить второй параметр, чтобы данные помещались в массив вместо отдельных переменных.

 $get_string = "pg_id=2&parent_id=2&document&video"; parse_str($get_string, $get_array); print_r($get_array); 

Иногда parse_str() является 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 ); 

Использование 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); 

Существует несколько возможных методов, но для вас уже существует встроенная функция parse_str

 $array = array(); parse_str($string, $array); var_dump($array); 

Если у вас возникла проблема с преобразованием строки запроса в массив из-за кодированных амперсандов

 & 

то обязательно используйте 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' => ) 

Это однострочный синтаксический анализатор для анализа запроса из текущего 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); 

Для этого конкретного вопроса выбранный ответ правильный, но если имеется избыточный параметр – например, дополнительный «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" } 

Теперь у вас есть все вхождения каждого параметра в свой собственный массив, вы всегда можете объединить их в один массив, если хотите.

Надеюсь, это поможет!