将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)这样的东西会是你想要的吗?