Как я могу превратить строку ниже в массив ?
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" }
Теперь у вас есть все вхождения каждого параметра в свой собственный массив, вы всегда можете объединить их в один массив, если хотите.
Надеюсь, это поможет!