/*在编程当中获取$_GET参数的时候有时间会有多个键名重复的值,当然这也许是程序员所需要的,故意利用后一个键
名和覆盖前一个键名,从而达到自己的目的,但在接收query参数的时候,我们有时间不想看到重复的键值对,
所以我写了个函数解决这问题,希望大家指正,当然如果有更好更简单的办法,也请大家写一下*/
$str = "name=张三&sex=男&name=李白";function formatQuery($query)
{
$array = array();
$query = explode("&",$query);
foreach($query as $val)
{
$k = substr($val,0,strpos($val,"="));
if($k)
{
$array[$k] = $val;
}
elseif($val)
{
$array[$val] = "{$val}=";
}
}
return implode("&",$array);
}
echo formatQuery($str);

解决方案 »

  1.   

    谢谢啊?为什么要urldecode 
    我用strpos查找的是=号不是中文啊?您能举一个反例子,让我的函数出错吧?
    不好意思,别见怪,我是真心想学习的。
      

  2.   


    <?php
    $str = 'name=张三&sex=男&name=李白';// 这个数据应该encode否则当value内包含&会出问题的。
    function parseStr ($str){
    $list = explode('&',$str);
    $list = array_reverse($list);
    if (false){ // a  
    return implode('&',$list);
    }else{ // b
    $str = implode('&',$list);
    parse_str($str,$list);
    return http_build_query($list);  
    }
    }
    var_export(parseStr($str));
    ?>
      

  3.   

    兼容性不是太好啊?
    你解析以下的查询字符串看一下吧$str = 'name=&张三&sex=男&name=李白';// 这个数据应该encode否则当value内包含&会出问题的。