Php 将查询字符串解析为数组

Php 将查询字符串解析为数组,php,arrays,string,Php,Arrays,String,如何将下面的字符串转换为数组 这就是我要找的阵列 array( 'pg_id' => 2, 'parent_id' => 2, 'document' => , 'video' => ) 使用 有几种可能的方法,但对于您来说,已经有了内置的方法 您需要函数,并且需要设置第二个参数,以便将数据放入数组而不是单个变量中 $get_string = "pg_id=2&parent_id=2&document&video";

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

这就是我要找的阵列

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


有几种可能的方法,但对于您来说,已经有了内置的方法

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

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

parse_str($get_string, $get_array);

print_r($get_array);
使用

注意,它的用法是:

parse_str($str, &$array);
不是


如果由于编码的符号而在将查询字符串转换为数组时遇到问题

&
然后确保使用html\u实体\u解码

例如:

有时,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解析到数组的行程序:

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

对于这个特定的问题,选择的答案是正确的,但是如果URL中有多余的参数,如额外的e-in,则函数将自动失败,不会引发错误或异常:

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" } 
现在,每个参数的所有引用都在其自己的数组中,如果需要,可以随时将它们合并到一个数组中


希望有帮助

可以使用PHP字符串函数parse_str后跟foreach循环


这是在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,其中y='cc'从xx中选择xx左连接选择xx,从xx中选择前1个xxx按xxx顺序 ;

追问 从xx中选择xx

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

从xx中选择xx左连接选择xx,从xxx中选择前1个xxx按xxx说明排序


谢谢您,来自印度尼西亚

我对这个答案有一个问题,因为如果您多次使用同一个键,它将不起作用。是的,因为在php数组中,键是唯一的。那么?key=lorem&key=ipsum将导致array[key]=>ipsum问题是,是否有一个函数来获取s.th。就像这个数组[key]=>arraylorem,ipsum,或者我必须自己创建这个函数吗?从技术上讲,PHP也会将?key=lorem&key=ipsum视为您只提供了key=ipsum,如果这是URL上的查询字符串。我认为重用密钥并期望一致的结果或者保留密钥的所有实例是无效的。至少对于发送到PHP的查询字符串而言,有效的方法是?key[]=lorem&key[]=ipsum,因此您自行开发的方法可能会查找&{x}=x多次出现并替换为x[]的任何事件,然后处理?和&@Mabi一样-哦,看,其他人也同意你的观点,并且已经创建了自己的函数-这很有帮助!几周前,我决定这样做。但是谢谢分享链接!需要注意的是包含“+”的字符串,如myemail+alias@gmail.com. 这些将由parse_str解析为一个空格。key=myemailalias@gmail.com.It's`parse_str$str,$arr;`而不是解析_str$str,&$arr;可怕的错误您不应该有相同的查询参数名称和不同的值。这是没有意义的,因为无论如何只接受一个。@Cristian:“您永远不应该有相同的查询参数名称和不同的值。”您是正确的,但答案是,“…函数的URL将自动失败,不会引发错误或异常。”这可能会中断应用程序。虽然这个答案不是很好,但它确实突出了一个问题。特别是如果你的应用程序可能会被某个人随意提出一个带有额外参数的请求而崩溃的话。我猜它需要$\u SERVER['QUERY\u STRING']如何数组到字符串url例如:array[somepage?id]=>123[lang]=>gr[size]=>300输出=somepage?id=123&lang=gr&size=300这对于删除不需要的&;
Array ( 
    [somepage?id] => 123 
    [lang] => gr 
    [size] => 300 
)
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
parse_str($_SERVER['QUERY_STRING'], $query);
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" } 
$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);
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;
}