在PHP

时间:2015-05-14 15:10:01

标签: php

我需要保留或以某种方式确定作为查询字符串参数提供的数组参数的原始顺序。

IE中。请求的网址为/?a[]=x&b[]=y&a[]=z。通过$_GET访问参数时,PHP会将值解析为两个数组,从中我无法确定在第二个a[]=z之后指定了第三个b[]=y参数。

// Request URL is index.php?a[]=x&b[]=y&a[]=z
print_r($_GET);

// Or equivalent, as I actually work with the query string, not with $_GET
parse_str('a[]=x&b[]=y&a[]=z', $params);
print_r($params);

// Output
Array
(
    [a] => Array
        (
            [0] => x
            [1] => z
        )

    [b] => Array
        (
            [0] => y
        )

)

我想要的是这样的东西:

[
    'a',
    'b',
    'a',
]

......或者可以确定原始订单的类似内容。

除了编写自定义查询字符串解析器之外,有什么办法可以实现这个目的吗?

1 个答案:

答案 0 :(得分:0)

您需要自己解析查询字符串,因为在表单或获取参数中使用数组是为了对值进行分组。

为了您的目的,您可以使用:

$queryParameters = explode('&',$_SERVER["QUERY_STRING"]);
$postData = array();
foreach($queryParameters as $queryParameter){
    list($key, $value) = explode('[]=', $queryParameter);
    $postData[] = array(
        'key' => $key,
        'value' => $value
    );
}

它返回:

array(3) {
  [0]=>
  array(2) {
    ["key"]=>
    string(1) "a"
    ["value"]=>
    string(1) "x"
  }
  [1]=>
  array(2) {
    ["key"]=>
    string(1) "b"
    ["value"]=>
    string(1) "y"
  }
  [2]=>
  array(2) {
    ["key"]=>
    string(1) "a"
    ["value"]=>
    string(1) "z"
  }
}

但我认为更好地更改查询参数的键。如果您描述了您需要的内容,那么最简单的方法就是帮助您找到正确的解决方案。