如何将下面的字符串转换为数组?

pg_id=2&parent_id=2&document&video 

这就是我要找的数组,

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

当前回答

你可以试试下面的代码:

<?php
    $str = "pg_id=2&parent_id=2&document&video";
    $array = array();
    parse_str($str, $array);
    print_r($array);
?>

输出:

Array
(
    [pg_id] => 2
    [parent_id] => 2
    [document] =>
    [video] =>
)

其他回答

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

现在你已经有了每个参数在它自己的数组中出现的所有情况,如果你想,你总是可以将它们合并到一个数组中。

希望有帮助!

使用http://us1.php.net/parse_str

注意,它的用法是:

parse_str($str, &$array);

not

$array = parse_str($str);

请注意,以上内容仅适用于PHP 5.3及更早版本。在PHP 5.4中删除了调用时引用传递。

。使用的作用是:将字串符

$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);

如果您在将查询字符串转换为数组时遇到问题,因为已编码的&符号

&amp;

然后确保使用html_entity_decode

例子:

// Input string //
$input = 'pg_id=2&amp;parent_id=2&amp;document&amp;video';

// Parse //
parse_str(html_entity_decode($input), $out);

// Output of $out //
array(
  'pg_id' => 2,
  'parent_id' => 2,
  'document' => ,
  'video' =>
)

有时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 );