将查询字符串解析为一个数组
我怎样才能把一个字符串转换成一个数组 ?
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);
有几种可能的方法,但对你来说,已经有了一个内建函数
$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" }
现在你已经拥有了它自己数组中每个参数的所有事件,如果你愿意的话,你总是可以把它们合并成一个数组。
希望有所帮助!