multibyte and multi-dimensional-array support, have fun!
<?php
    define('ARRAY_KEY_FC_LOWERCASE', 25); define('ARRAY_KEY_FC_UPPERCASE', 20); define('ARRAY_KEY_UPPERCASE', 15); define('ARRAY_KEY_LOWERCASE', 10); define('ARRAY_KEY_USE_MULTIBYTE', true); function array_change_key_case_ext(array $array, $case = 10, $useMB = false, $mbEnc = 'UTF-8') {
$newArray = array();
if($useMB === false) {
$function = 'strToUpper'; switch($case) {
case 25:
if(!function_exists('lcfirst')) 
$function = create_function('$input', '
                            return strToLower($input[0]) . substr($input, 1, (strLen($input) - 1));
                        ');
                    else $function = 'lcfirst';
                    break;
case 20:
$function = 'ucfirst';
                    break;
case 10:
$function = 'strToLower';
            }
        } else {
switch($case) {
case 25:
$function = create_function('$input', '
                        return mb_strToLower(mb_substr($input, 0, 1, \'' . $mbEnc . '\')) . 
                            mb_substr($input, 1, (mb_strlen($input, \'' . $mbEnc . '\') - 1), \'' . $mbEnc . '\');
                    ');
                    break;
case 20:
$function = create_function('$input', '
                        return mb_strToUpper(mb_substr($input, 0, 1, \'' . $mbEnc . '\')) . 
                            mb_substr($input, 1, (mb_strlen($input, \'' . $mbEnc . '\') - 1), \'' . $mbEnc . '\');
                    ');
                    break;
case 15:
$function = create_function('$input', '
                        return mb_strToUpper($input, \'' . $mbEnc . '\');
                    ');
                    break;
default: $function = create_function('$input', '
                        return mb_strToLower($input, \'' . $mbEnc . '\');
                    ');
            }
        }
foreach($array as $key => $value) {
            if(is_array($value)) $newArray[$function($key)] = array_change_key_case_ex($value, $case, $useMB);
            elseif(is_string($key))
$newArray[$function($key)] = $value;
            else $newArray[$key] = $value; } return $newArray;
    }
?>