(PHP 4 >= 4.2.0, PHP 5)
array_change_key_case — 返回字符串键名全为小写或大写的数组
$input
[, int $case
= CASE_LOWER
] )
array_change_key_case() 将 input
数组中的所有键名改为全小写或大写。改变是根据后一个选项 case
参数来进行的。本函数不改变数字索引。
input
需要操作的数组。
case
可以在这里用两个常量,CASE_UPPER
或
CASE_LOWER
(默认值)。
Returns an array with its keys lower or uppercased, or FALSE
if
input
is not an array.
Throws E_WARNING
if input
is
not an array.
Example #1 array_change_key_case() example
<?php
$input_array = array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER));
?>
以上例程会输出:
Array ( [FIRST] => 1 [SECOND] => 4 )
Note:
如果一个数组中的多个键名经过本函数后变成一样的话(例如 "keY" 和 "kEY"),最后一个值将覆盖其它的值。
NetPanther (2012-09-22 01:27:16)
Use this to capitalize first letter of all array keys:
<?php
function ucfirstKeys(&$data)
{
foreach ($data as $key => $value)
{
// Convert key
$newKey = ucfirst($key);
// Change key if needed
if ($newKey != $key)
{
unset($data[$key]);
$data[$newKey] = $value;
}
// Handle nested arrays
if (is_array($value))
{
ucfirstKeys($data[$key]);
}
}
}
$test = array('foo' => 'bar', 'moreFoo' => array('more' => 'foo'));
ucfirstKeys($test);
print_r($test);
?>
Result:
Array ( [MoreFoo] => Array ( [More] => foo ) [Foo] => bar )
qeremy [atta] gmail [dotta] com (2012-02-28 17:15:13)
Unicode example;
<?php
function array_change_key_case_unicode($arr, $c = CASE_LOWER) {
$c = ($c == CASE_LOWER) ? MB_CASE_LOWER : MB_CASE_UPPER;
foreach ($arr as $k => $v) {
$ret[mb_convert_case($k, $c, "UTF-8")] = $v;
}
return $ret;
}
$arr = array("FirSt" => 1, "ya?" => "Oil", "?ekER" => "sugar");
print_r(array_change_key_case($arr, CASE_UPPER));
print_r(array_change_key_case_unicode($arr, CASE_UPPER));
?>
Array
(
[FIRST] => 1
[YA?] => Oil
[?EKER] => sugar
)
Array
(
[FIRST] => 1
[YA?] => Oil
[?EKER] => sugar
)
JOE (2011-10-19 23:13:10)
Script to change case of sub-arrays keys to lower . It works well for me. hope it helps.
<?php
$array=array("First"=>"val1","SecoNd"=>"val2",
"third"=>array("third-INner1"=>"val3.1"),
"fourth"=>array("FouthINNer1"=>"val4.1","FourthINNER2"=>"val4.2"));
print_r($array);
$key=array_keys($array);
foreach($key as $ki)
{
$klower=strtolower($ki);
$val=$array[$ki];
if(is_array($val))
{
foreach($val as $kinner=>$vinner)
{
$tl=strtolower($kinner);
unset($val[$kinner]);
$val[$tl]=$vinner;
}
}
unset($array[$ki]);
$array[$klower]=$val;
}
echo "<br> After Changing Key to-LowerCase : <br>";
print_r($array);
?>
Lus Henrique Pessoa (2010-09-24 09:03:37)
<?php
// improving the previous script
function ack_r3(&$array, $case=CASE_LOWER, $flag_rec=false)
{
$array = array_change_key_case($array, $case);
if ( $flag_rec ) {
foreach ($array as $key => $value) {
if ( is_array($value) ) {
ack_r3($array[$key], $case, true);
}
}
}
}
// same of array_change_key_case
$arr = array('ID' => 1, 'NAME'=> 'Luis', 'Contact' => array('PHONE' => '3010-7148', 'E-MAIL' => 'luis@net.com') );
ack_r3($arr, CASE_LOWER,false);
var_dump($arr);
$arr = array('ID' => 1, 'NAME'=> 'Luis', 'Contact' => array('PHONE' => '3010-7148', 'E-MAIL' => 'luis@net.com') );
ack_r3($arr, CASE_LOWER,true);
var_dump($arr);
?>
outputs:
array(3) {
["id"]=>
int(1)
["name"]=>
string(4) "Luis"
["contact"]=>
array(2) {
["PHONE"]=>
string(9) "3010-7148"
["E-MAIL"]=>
string(12) "luis@net.com"
}
}
array(3) {
["id"]=>
int(1)
["name"]=>
string(4) "Luis"
["contact"]=>
array(2) {
["phone"]=>
string(9) "3010-7148"
["e-mail"]=>
string(12) "luis@net.com"
}
}
Luis Henrique Pessoa (2010-09-23 09:25:11)
Script to change case of sub-arrays keys:
<?php
function arrKey2Lower(&$arrVals) {
foreach( $arrVals as $key => $item ) {
$key2 = strtolower($key);
if ( $key2 != $key) {
unset($arrVals[$key]);
$arrVals[$key2]=$item;
$key=$key2;
}
if ( is_array($item) ) { arrKey2Lower($arrValores[$key]); }
}
}
$arr = array('ID' => 1, 'NAME'=> 'Luis', 'Contact' => array('PHONE' => '3010-7148', 'E-MAIL' => 'luis@net.com') );
arrKey2Lower($arr);
var_dump($arr);
?>
outputs:
array(3) {
["id"]=>
int(1)
["name"]=>
string(4) "Luis"
["contact"]=>
array(2) {
["phone"]=>
string(9) "3010-7148"
["e-mail"]=>
string(12) "luis@net.com"
}
}
info at microweb dot lt (2009-11-29 02:07:49)
Simple function to change multidimensional array's all values to uppercase. If you would like to change to lowercase then change "mb_strtoupper" to "mb_strtolower". It works perfect for me ;)
<?php
function change_case_recursive($arr){
foreach ($arr as $key=>$val){
if (!is_array($arr[$key])){
$arr[$key]=mb_strtoupper($arr[$key]);
}else{
$arr[$key]=change_case_recursive($arr[$key]);
}
}
return $arr;
}
?>
david at ramaboo dot com (2009-02-02 03:22:26)
Same as array_change_key_case only with the values. This should really be part of PHP!
<?php
/**
* @brief Returns an array with all values lowercased or uppercased.
* @return array Returns an array with all values lowercased or uppercased.
* @param object $input The array to work on
* @param int $case [optional] Either \c CASE_UPPER or \c CASE_LOWER (default).
*/
function array_change_value_case(array $input, $case = CASE_LOWER) {
switch ($case) {
case CASE_LOWER:
return array_map('strtolower', $input);
break;
case CASE_UPPER:
return array_map('strtoupper', $input);
break;
default:
trigger_error('Case is not valid, CASE_LOWER or CASE_UPPER only', E_USER_ERROR);
return false;
}
}
?>
charles (2009-01-12 23:38:49)
<?php
$input_array = array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER));
?>
anon at ymous dot com (2008-12-02 03:19:00)
Below is a recursive version of this function.
<?php
/**
* A recursive array_change_key_case function.
* @param array $input
* @param integer $case
*/
function array_change_key_case_recursive($input, $case = null){
if(!is_array($input)){
trigger_error("Invalid input array '{$array}'",E_USER_NOTICE); exit;
}
// CASE_UPPER|CASE_LOWER
if(null === $case){
$case = CASE_LOWER;
}
if(!in_array($case, array(CASE_UPPER, CASE_LOWER))){
trigger_error("Case parameter '{$case}' is invalid.", E_USER_NOTICE); exit;
}
$input = array_change_key_case($input, $case);
foreach($input as $key=>$array){
if(is_array($array)){
$input[$key] = array_change_key_case_recursive($array, $case);
}
}
return $input;
}
?>
andreas dot schuhmacher87 at googlemail dot com (2008-04-14 18:01:31)
multibyte and multi-dimensional-array support, have fun!
<?php
define('ARRAY_KEY_FC_LOWERCASE', 25); //FOO => fOO
define('ARRAY_KEY_FC_UPPERCASE', 20); //foo => Foo
define('ARRAY_KEY_UPPERCASE', 15); //foo => FOO
define('ARRAY_KEY_LOWERCASE', 10); //FOO => foo
define('ARRAY_KEY_USE_MULTIBYTE', true); //use mutlibyte functions
/**
* change the case of array-keys
*
* use: array_change_key_case_ext(array('foo' => 1, 'bar' => 2), ARRAY_KEY_UPPERCASE);
* result: array('FOO' => 1, 'BAR' => 2)
*
* @param array
* @param int
* @return array
*/
function array_change_key_case_ext(array $array, $case = 10, $useMB = false, $mbEnc = 'UTF-8') {
$newArray = array();
//for more speed define the runtime created functions in the global namespace
//get function
if($useMB === false) {
$function = 'strToUpper'; //default
switch($case) {
//first-char-to-lowercase
case 25:
//maybee lcfirst is not callable
if(!function_exists('lcfirst'))
$function = create_function('$input', '
return strToLower($input[0]) . substr($input, 1, (strLen($input) - 1));
');
else $function = 'lcfirst';
break;
//first-char-to-uppercase
case 20:
$function = 'ucfirst';
break;
//lowercase
case 10:
$function = 'strToLower';
}
} else {
//create functions for multibyte support
switch($case) {
//first-char-to-lowercase
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;
//first-char-to-uppercase
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;
//uppercase
case 15:
$function = create_function('$input', '
return mb_strToUpper($input, \'' . $mbEnc . '\');
');
break;
//lowercase
default: //case 10:
$function = create_function('$input', '
return mb_strToLower($input, \'' . $mbEnc . '\');
');
}
}
//loop array
foreach($array as $key => $value) {
if(is_array($value)) //$value is an array, handle keys too
$newArray[$function($key)] = array_change_key_case_ex($value, $case, $useMB);
elseif(is_string($key))
$newArray[$function($key)] = $value;
else $newArray[$key] = $value; //$key is not a string
} //end loop
return $newArray;
}
?>
dot dot dot dot dot alexander at gmail dot com (2008-01-30 09:22:20)
Basically this is the function if your version is lower than 4.2.0
<?php
if ( !defined('CASE_LOWER') )define('CASE_LOWER', 0);
if ( !defined('CASE_UPPER') )define('CASE_UPPER', 1);
if(!function_exists("array_change_key_case")){
function array_change_key_case($input, $case=0){
if(!is_array($input))return FALSE;
$product = array();
foreach($input as $key => $value){
if($case){ //Upper
$key2 = ( (is_string($key)) ? (strtoupper($key)) : ($key) );
$product[$key2] = $value;
}
else{ //Lower
$key2 = ( (is_string($key)) ? (strtolower($key)) : ($key) );
$product[$key2] = $value;
}
}
return $product;
}/* endfunction array_change_key_case */
}/* endfunction exists array_change_key_case*/
?>
john at doe dot com (2007-09-26 00:04:53)
<?php
function array_change_value_case($input, $case = CASE_LOWER)
{
$aRet = array();
if (!is_array($input))
{
return $aRet;
}
foreach ($input as $key => $value)
{
if (is_array($value))
{
$aRet[$key] = array_change_value_case($value, $case);
continue;
}
$aRet[$key] = ($case == CASE_UPPER ? strtoupper($value) : strtolower($value));
}
return $aRet;
}
?>
cm at gameswelt dot de (2007-08-10 04:11:50)
I just changed the code a little bit so you havent got a code that repeats itself.
<?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
)
*/
aidan at php dot net (2004-06-01 20:06:46)
This functionality is now implemented in the PEAR package PHP_Compat.
More information about using this function without upgrading your version of PHP can be found on the below link:
http://pear.php.net/package/PHP_Compat