将查询字符串解析为数组

时间:2011-03-22 20:55:06

标签: php arrays string

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

pg_id=2&parent_id=2&document&video 

这是我要找的数组,

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

11 个答案:

答案 0 :(得分:287)

您需要parse_str函数,并且需要设置第二个参数以将数据放入数组而不是单个变量。

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

parse_str($get_string, $get_array);

print_r($get_array);

答案 1 :(得分:53)

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

答案 2 :(得分:30)

使用parse_str()

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

答案 3 :(得分:18)

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

注意,它的用法是:

parse_str($str, &$array);

不是

$array = parse_str($str);

答案 4 :(得分:15)

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

&

然后一定要使用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' =>
)

答案 5 :(得分:13)

有几种可能的方法,但对你而言,已有内置parse_str function

$array = array();
parse_str($string, $array);
var_dump($array);

答案 6 :(得分:3)

这是用于解析从当前URL到数组的查询的一行代码:

parse_str($_SERVER['QUERY_STRING'], $query);

答案 7 :(得分:1)

您可以使用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);

答案 8 :(得分:1)

// ok, another method using c4 ..    

// we have $input as string
$input = "pg_id=2&parent_id=2&document&video";

// looking for $output as array
$output= array(); 

// We knead a bit c4, and stick it to $input and turn it to pieces ...
$pieces = explode("&",$input);

// we pick up all the pieces and make the output array
foreach($pieces as $k => $v){
    // the new key is what is before the "="
    $var[$k] = explode("=",$pieces[$k])[0];
    // and the new value is what is after the "="
    $output[$var[$k]] = explode("=",$pieces[$k])[1];
}


// print_r($output);
Array
(
    [pg_id] => 2
    [parent_id] => 2
    [document] => 
    [video] => 
)

答案 9 :(得分:-3)

这是在mysql和mssql中拆分查询的PHP代码

enter code here
function splitquery($strquery)
{
$arrquery=explode('select',$strquery);

$stry='';$strx='';

for($i=0;$i<count($arrquery);$i++)
{
if($i==1)
{
    echo 'select '.trim($arrquery[$i]);
}
elseif($i>1)
{

$strx=trim($arrquery[($i-1)]);

    if(trim(substr($strx,-1))!='(')
    {
        $stry=$stry.'

select '.trim($arrquery[$i]);
    }
    else
    {
        $stry=$stry.trim('select '.trim($arrquery[$i]));
    }

$strx='';
}
} 

return $stry;
}

示例:

之前查询

从xx中选择xx,从xx中选择xx,(从xx中选择xx),其中y ='cc'从xx左连接中选择xx(选择xx)其中(从xxx中选择前1个xxx)或按xxx desc “;

查询之后

从xx中选择xx

选择xx,(从xx中选择xx),其中y ='cc'

从xx左连接中选择xx(选择xx),其中(从xxx中选择前1个xxx)按xxx desc排序

谢谢,来自印度尼西亚Sentrapedagang.com

答案 10 :(得分:-4)

对于这个特定问题,所选答案是正确的,但是如果有一个冗余参数 - 比如额外的“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" } 

现在,每个参数都出现在自己的数组中,如果需要,可以将它们合并到一个数组中。

希望有所帮助!