将查询字符串解析为一个数组

我怎样才能把一个字符串转换成一个数组

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()单独是注意准确的,它可以显示例如:

 $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);

有几种可能的方法,但对你来说,已经有了一个内建函数

 $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循环。

 <?php $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); ?> 

对于这个特定的问题,所选的答案是正确的,但是如果在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" } 

现在你已经拥有了它自己数组中每个参数的所有事件,如果你愿意的话,你总是可以把它们合并成一个数组。

希望有所帮助!