将HTTP数据解析为PHP变量

时间:2009-07-27 04:28:00

标签: php http variables parsing

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

 foo=bar&spam[eggs]=delicious&...

这些都在一个字符串中(例如,$ data =“foo = bar& spam [eggs] = delicious& ...”)。变量是任意深度嵌套的 - 很容易深入四或五级(“垃圾邮件[egg] [血腥] [vikings] =响亮”)。

有一个简单,可靠的方法来从中获取多维PHP数组吗?我假设PHP有一个解析器来执行此操作,但我不知道它是否暴露给我使用。理想情况下,我可以做类似的事情:

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

3 个答案:

答案 0 :(得分:5)

如果您的字符串采用URI参数格式,parse_str是您正在寻找的神奇功能。

答案 1 :(得分:3)

你可能想看看parse_str;这是一个例子:

$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]被第二个重写的事实,顺便说一句

答案 2 :(得分:1)

如果您的数据来自请求uri,请使用$_GET