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;
是不是没这个必要。或者是手册错了。
$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;
是不是没这个必要。或者是手册错了。
$secure[$key][] = $val;
} else {
$secure[$key][] = $val;
}把存在的$key放置前面,[]在累加
累积顺序是不一样的,另外关联数组是无法遍历获取关键字重复的数据,它只能获取到最后一个重复的元素,如下:$aaa=array('a'=>'fdfd','a'=>'fdsf');foreach($aaa as $key=>$value)
{
//输出:a:fdsf,就是说只能读取到最后一个重复的元素
echo $key.':'.$value.'<br/>';
}
首先,你得告诉我们你这个函数哪里来的....我在手册的注释里找到一个 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
)
*/