2016-05-30 63 views
1

我有以下代码是否有处理重复键的parse_str + http_build_query替代方法?

$post = 'foo=bar&foo=baz'; 
parse_str($post, $parameters); 

产量:

array(1) { 
    'foo' => 
    string(3) "baz" 
} 

我不能修改$post

我在找的是parse_str的一个版本(处理边界情况和解码为parse_str),但允许重复的键。

它应该与http_build_query兼容以重新组装$post数据(修改后)。

有没有人执行这样的方法呢还是有没有lib的呢?

我的搜索没有收到。

+0

为什么不让一个人做你明确需要的东西? – Martin

+0

'$ post = str_replace('foo =','foo [] =',$ post);'SCNR – PiTheNumber

+3

'http:// php.net/manual/ru/function.parse-str.php#76792' – splash58

回答

1

基于http://php.net/manual/ru/function.parse-str.php#76792我决定对我的内联进行处理 - 无需将整个思维转换为某种结构并将其构建回来。这就是我最终得到的结果:

function process_query_str($str) { 
    # result array 
    $parts = array(); 

    # split on outer delimiter 
    $pairs = explode('&', $str); 

    # loop through each pair 
    foreach ($pairs as $i) { 
     # split into name and value 
     list($name,$value) = explode('=', $i, 2); 
     $value = urldecode($value); 

     // **** DO PROCESSING **** 
     $value = strtoupper($value); 

     // reassemble 
     $parts[] = http_build_query(array($name=>$value)); 
    } 

    # return result array 
    return implode('&', $parts); 
} 

$query = process_query_str('foo=bar&foo=baz'); 
echo $query; 
相关问题