Анализировать строку запроса в массив


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

pg_id=2&parent_id=2&document&video 

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

array(
    'pg_id' => 2,
    'parent_id' => 2,
    'document' => ,
    'video' =>
)
Author: JakeGould, 2011-03-22

9 answers

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

$get_string = "pg_id=2&parent_id=2&document&video";

parse_str($get_string, $get_array);

print_r($get_array);
 259
Author: Anthony, 2017-12-08 01:08:07

Иногда 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 );
 49
Author: yassine2020, 2017-12-08 01:16:41

Использование parse_str().

$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
 28
Author: Rocket Hazmat, 2011-03-22 20:57:56

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

&

Затем обязательно используйте 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' =>
)
 14
Author: Casper Wilkes, 2015-01-05 05:14:59

Использовать http://us1.php.net/parse_str

Внимание, его использование таково:

parse_str($str, &$array);

Не

$array = parse_str($str);
 13
Author: Ionut Bajescu, 2017-12-08 01:17:42

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

$array = array();
parse_str($string, $array);
var_dump($array);
 11
Author: KingCrunch, 2017-12-08 01:17:18

Это однострочный синтаксический анализ запроса из текущего URL-адреса в массив:

parse_str($_SERVER['QUERY_STRING'], $query);
 3
Author: hovado, 2016-05-02 17:35:16

Вы можете использовать строковую функцию 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);
 1
Author: JakeGould, 2017-12-08 01:08:55

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

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

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

 -4
Author: Nassim, 2017-12-08 01:10:50