function array_change_key_case_secure($array = array(),$case = CASE_UPPER) {
    $secure = array();
    if ($case == CASE_UPPER) {
        foreach ($array as $key=>$val) {
            $key = strtoupper($key);
            if (!array_key_exists($key,$secure)) {
                $secure[$key][] = $val;
            } else {
                $secure[$key][] = $val;
            }
        }
    } else if ($case == CASE_LOWER) {
        foreach ($array as $key=>$val) {
            $key = strtolower($key);
            if (!array_key_exists($key,$secure)) {
                $secure[$key][] = $val;
            } else {
                $secure[$key][] = $val;
            }
        }        
    }
    
    foreach ($secure as $key=>$val) {
        if (count($secure[$key]) == 1) {
            $secure[$key] = $val[0];
        }
    }
    return $secure;    
}
--------------------------
大家有手册的可以先去查手册的这个函数,再看下面
 if (!array_key_exists($key,$secure)) {
                $secure[$key][] = $val;
            } else {
                $secure[$key][] = $val;
            }
   这里的if else 都是$secure[$key][] = $val;
   是不是没这个必要。或者是手册错了。

解决方案 »

  1.   

     if (!array_key_exists($key,$secure)) {
      $secure[$key][] = $val;
      } else {
      $secure[$key][] = $val;
      }把存在的$key放置前面,[]在累加
      

  2.   

    把不存在的$key放置前面,[]在累加
      

  3.   


    累积顺序是不一样的,另外关联数组是无法遍历获取关键字重复的数据,它只能获取到最后一个重复的元素,如下:$aaa=array('a'=>'fdfd','a'=>'fdsf');foreach($aaa as $key=>$value)
    {
        //输出:a:fdsf,就是说只能读取到最后一个重复的元素
        echo $key.':'.$value.'<br/>';
    }
      

  4.   


    首先,你得告诉我们你这个函数哪里来的....我在手册的注释里找到一个 http://php.net/manual/en/function.array-change-key-case.php但是和你贴出来的不同, 他的代码没有你说的问题
    function array_change_key_case_secure($array = array(), $case = CASE_UPPER){
        $secure = array();
        $functionWrap = array(CASE_UPPER => 'strtoupper',
                                CASE_LOWER => 'strtolower');
                                
        foreach($array as $key => $val){
            if(isset($functionWrap[$key])){
                $key = $functionWrap[$case]($key);
                $secure[$key][] = $val;
            } else {
                die('Not a known Type');
            }
        }
        
        foreach($secure as $key => $val){
            if(count($secure[$key]) == 1){
                $secure[$key] = $val[0];
            }
        }
        
        return $secure;
    }$myArray = array('A' => 'Hello',
                        'B' => 'World',
                        'a' => 'how are you?');print_r($myArray);
    $myArray = array_change_key_case_secure($myArray);
    print_r($myArray);/*
    Array
    (
        [A] => Hello
        [B] => World
        [a] => how are you?
    )
    Array
    (
        [A] => Array
            (
                [0] => Hello
                [1] => how are you?
            )    [B] => World
    )
    */