array_change_key_case

(PHP 4 >= 4.2.0, PHP 5)

array_change_key_caseChange la casse de toutes les clés d'un tableau

Description

array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )

Modifie les clés du tableau array et force leur casse. Cette fonction laissera les clés numériques inchangées.

Liste de paramètres

array

Le tableau à traiter

case

Soit CASE_UPPER (majuscules), soit CASE_LOWER (minuscules, valeur par défaut)

Valeurs de retour

Retourne un tableau dont les clés ont été transformées en majuscule ou en minuscule, ou FALSE si array n'est pas un tableau.

Erreurs / Exceptions

Lance une alerte de niveau E_WARNING si array n'est pas un tableau.

Exemples

Exemple #1 Exemple avec array_change_key_case()

<?php
$input_array 
= array("FirSt" => 1"SecOnd" => 4);
print_r(array_change_key_case($input_arrayCASE_UPPER));
?>

L'exemple ci-dessus va afficher :

Array
(
    [FIRST] => 1
    [SECOND] => 4
)

Notes

Note:

Si un tableau possède des clés qui seront identiques lors de l'exécution de cette fonction (e.g. "clé" et "CLé"), la dernière valeur dans le tableau écrasera les précédentes.

add a note add a note

User Contributed Notes 15 notes

up
14
qeremy [atta] gmail [dotta] com
2 years ago
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
)
up
3
xsaero00
7 months ago
Here is the most compact way to lower case keys in a multidimensional array

function array_change_key_case_recursive($arr)
{
    return array_map(function($item){
        if(is_array($item))
            $item = array_change_key_case_recursive($item);
        return $item;
    },array_change_key_case($arr));
}
up
5
andreas dot schuhmacher87 at googlemail dot com
6 years ago
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;
    }
?>
up
4
Luis Henrique Pessoa
4 years ago
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"
  }
}
up
1
Lus Henrique Pessoa
4 years ago
<?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"
  }
}
up
1
john at doe dot com
7 years ago
<?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;
}
?>
up
0
NetPanther
2 years ago
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 )
up
0
JOE
3 years ago
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);

?>
up
0
charles
5 years ago
<?php
$input_array
= array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER));
?>
up
0
aidan at php dot net
10 years ago
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
up
-1
info at microweb dot lt
5 years ago
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;   
}
?>
up
-2
dot dot dot dot dot alexander at gmail dot com
6 years ago
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*/
?>
up
-2
cm at gameswelt dot de
7 years ago
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
)
*/
up
-3
david at ramaboo dot com
5 years ago
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;
    }
}
?>
up
-2
anon at ymous dot com
6 years ago
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;
    }
?>
To Top