将查询字符串中的数组解析为数组而不是字面上的“数组”

时间:2013-01-10 14:36:55

标签: php arrays uri query-string eval

我遇到了一个不寻常的情况,我需要将查询字符串转换为数组。

查询字符串出现为:

?sort%5B0%5D%5Bfield%5D=type&sort%5B0%5D%5Bdir%5D=desc

其解码为:

sort[0][field]=type&sort[0][dir]=desc

如何将此作为可用数组导入我的PHP?即。

echo $sort[0][field] ; // Outputs "type"

我尝试了邪恶的eval(),但没有运气。


我需要更好地解释,我需要的是排序的文字字符串%5B0%5D%5Bfield%5D = type& sort%5B0%5D%5Bdir%5D = desc进入我的脚本并存储为变量,因为它将作为函数中的参数传递。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

PHP会将该格式转换为数组。

header("content-type: text/plain");
print_r($_GET);

给出:

Array
(
    [sort] => Array
        (
            [0] => Array
                (
                    [field] => type
                    [dir] => desc
                )

        )

)

如果您的意思是将字符串作为字符串而不是作为输入到您网页的查询字符串,请使用parse_str函数进行转换。

header("content-type: text/plain");
$string = "sort%5B0%5D%5Bfield%5D=type&sort%5B0%5D%5Bdir%5D=desc";
$array = Array();
parse_str($string, $array);
print_r($array);

...给出相同的输出。

答案 1 :(得分:0)

使用parse_str()

http://php.net/manual/en/function.parse-str.php

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
vecho $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz


parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>