将查询字符串解析为数组

lau*_*kok 182 php arrays string

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

pg_id=2&parent_id=2&document&video 
Run Code Online (Sandbox Code Playgroud)

这是我要找的阵列,

array(
    'pg_id' => 2,
    'parent_id' => 2,
    'document' => ,
    'video' =>
)
Run Code Online (Sandbox Code Playgroud)

Ant*_*ony 308

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

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

parse_str($get_string, $get_array);

print_r($get_array);
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,PHP也会处理`?key = lorem&key = ipsum`,好像你只提供了`key = ipsum`,如果它是URL上的查询字符串.我认为重用密钥并期望一致的结果或保留密钥的所有实例被视为无效.有效的方法,至少对于发送给PHP的查询字符串,将是`?key [] = lorem&key [] = ipsum`,因此你的本土方法可能会寻找任何出现的`&{x} =`其中x出现更多比一次更换`x []`(并处理?与&相同) (9认同)
  • @Mabi - 哦,看,别人同意你并且已经创建了他们自己的功能 - http://php.net/manual/en/function.parse-str.php#76792 (8认同)
  • 我对这个答案有疑问,因为如果你多次使用相同的密钥它是行不通的(是的,因为在php数组键中是唯一的).所以`?key = lorem&key = ipsum`将导致`array(["key"] =>"ipsum")`问题是,是否有一个函数来获得s.th. 像这样的`array(["key"] => array("lorem","ipsum"))`或者我必须自己创建这个函数吗? (2认同)
  • 需要注意的是包含'+'的字符串,如myemail+alias@gmail.com.这些将由parse_str解析为空格.key = myemail alias@gmail.com. (2认同)

小智 56

有时parse_str()单独注意准确,它可以显示例如:

$url = "somepage?id=123&lang=gr&size=300";
Run Code Online (Sandbox Code Playgroud)

parse_str()将返回:

Array ( 
    [somepage?id] => 123 
    [lang] => gr 
    [size] => 300 
)
Run Code Online (Sandbox Code Playgroud)

这将是更好地结合起来parse_str()parse_url(),像这样:

$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
Run Code Online (Sandbox Code Playgroud)

  • 我想这是期待`$ _SERVER ['QUERY_STRING']` (3认同)

Roc*_*mat 30

parse_str().

$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
Run Code Online (Sandbox Code Playgroud)


小智 18

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

注意,它的用法是:

parse_str($str, &$array);
Run Code Online (Sandbox Code Playgroud)

$array = parse_str($str);
Run Code Online (Sandbox Code Playgroud)

  • 它是`parse_str($ str,$ arr);`而不是`parse_str($ str,&$ arr);`可怕的错误 (2认同)

Cas*_*kes 16

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

&
Run Code Online (Sandbox Code Playgroud)

然后一定要使用 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' =>
)
Run Code Online (Sandbox Code Playgroud)


Kin*_*nch 13

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

$array = array();
parse_str($string, $array);
var_dump($array);
Run Code Online (Sandbox Code Playgroud)


hov*_*ado 6

这是一个用于将当前 URL 中的查询解析为数组的单行代码:

parse_str($_SERVER['QUERY_STRING'], $query);
Run Code Online (Sandbox Code Playgroud)