将HTTP数据解析为PHP变量

将HTTP数据解析为PHP变量,php,http,variables,parsing,Php,Http,Variables,Parsing,我有相当多的变量以如下形式编码: foo=bar&spam[eggs]=delicious&... 这些都在一个字符串中(例如,$data=“foo=bar&spam[eggs]=delicious&…”)。这些变量是任意深度嵌套的——很容易达到四到五个层次(“垃圾邮件[鸡蛋][血腥][维京人]=loud”) 有没有一种简单、可靠的方法可以从中获得多维PHP数组?我假设PHP有一个解析器来做这件事,尽管我不知道它是否公开供我使用。理想情况下,我可以这样做: // given

我有相当多的变量以如下形式编码:

 foo=bar&spam[eggs]=delicious&...
这些都在一个字符串中(例如,$data=“foo=bar&spam[eggs]=delicious&…”)。这些变量是任意深度嵌套的——很容易达到四到五个层次(“垃圾邮件[鸡蛋][血腥][维京人]=loud”)

有没有一种简单、可靠的方法可以从中获得多维PHP数组?我假设PHP有一个解析器来做这件事,尽管我不知道它是否公开供我使用。理想情况下,我可以这样做:

// given $data == "foo=bar&spam[eggs]=delicious"
$arr = some_magical_function( $data );
/* arr = Array
    (
        [foo] => bar
        [spam] => Array
            (
                [eggs] => delicious
            )
    )
*/

如果您的字符串是URI params格式,则是您要查找的神奇函数。

如果您的字符串是URI params格式,则是您要查找的神奇函数。

您可能需要查看;下面是一个例子:

$str = "first=value&arr[]=foo+bar&arr[]=baz";

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
并且,根据您的输入:

$str = 'oo=bar&spam[eggs]=delicious&spam[eggs][bloody][vikings]=loud';
$output = array();
parse_str($str, $output);
var_dump($output);
您将得到以下结果:

array
  'oo' => string 'bar' (length=3)
  'spam' => 
    array
      'eggs' => 
        array
          'bloody' => 
            array
              'vikings' => string 'loud' (length=4)
这应该是你想要的;-)


(注意这个多级数组;顺便说一句,第一个垃圾邮件[eggs]已经被第二个垃圾邮件[eggs]覆盖)

您可能想看看;下面是一个例子:

$str = "first=value&arr[]=foo+bar&arr[]=baz";

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
并且,根据您的输入:

$str = 'oo=bar&spam[eggs]=delicious&spam[eggs][bloody][vikings]=loud';
$output = array();
parse_str($str, $output);
var_dump($output);
您将得到以下结果:

array
  'oo' => string 'bar' (length=3)
  'spam' => 
    array
      'eggs' => 
        array
          'bloody' => 
            array
              'vikings' => string 'loud' (length=4)
这应该是你想要的;-)


(注意这个多级数组;事实上,第一个垃圾邮件[eggs]已经被第二个垃圾邮件[eggs]覆盖,顺便说一句)

如果您的数据来自请求uri,请使用如果您的数据来自请求uri,如果您是PHP新手,请使用-确保您没有寻找$\u-GET或$\u-POST…可以是类似提取($\u-request)的东西如果你是PHP新手,请确保你不是在寻找$\u GET或$\u POST…像extract($\u REQUEST)这样的东西会是你想要的吗?