array_change_key_case

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

array_change_key_case更改数组中所有键的大小写

描述

array_change_key_case(数组 $array, 整型 $case = CASE_LOWER): 数组

返回一个数组,其中包含来自 array 的所有键,并将其全部转换为小写或大写。数字索引保持原样。

参数

数组

要操作的数组

大小写

CASE_UPPERCASE_LOWER (默认)

返回值

返回一个数组,其键为小写或大写。

示例

示例 #1 array_change_key_case() 示例

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

上面示例将输出

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

注释

注意:

如果一个数组的索引在经过此函数处理后将变得相同(例如 "keY" 和 "kEY"),则数组中后面的索引将覆盖其他索引。

添加注释

用户贡献的注释 20 个注释

qeremy [atta] gmail [dotta] com
12 年前
Unicode 示例;

<?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));
?>

数组
(
[FIRST] => 1
[YAğ] => Oil
[şEKER] => sugar
)
数组
(
[FIRST] => 1
[YAĞ] => Oil
[ŞEKER] => sugar
)
zhangxuejiang
4 年前
我改进了 array_change_key_case_recursive 函数,让它可以将键转换为小写或大写

function array_change_key_case_recursive($arr, $case = CASE_LOWER)
{
return array_map(function($item) use($case) {
if(is_array($item))
$item = array_change_key_case_recursive($item, $case);
return $item;
},array_change_key_case($arr, $case));
}
xsaero00
10 年前
这是将多维数组中的键转换为小写的最紧凑方式

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));
}
msegit post pl
3 年前
改进的多维 Unicode 函数(在 qeremy 之后)
<?php
function array_change_key_case_unicode_recurs($arr, $c = CASE_LOWER) {
foreach (
$arr as $k => $v) {
$ret[mb_convert_case($k, (($c === CASE_LOWER) ? MB_CASE_LOWER : MB_CASE_UPPER), "UTF-8")] = (is_array($v) ? array_change_key_case_unicode_recurs($v, $c) : $v );
}
return
$ret;
}

$arr = array("FirSt" => 1, "ZażóŁć gęŚlą jaŹń" => array("yağ" => "Oil", "şekER" => "sugar") );
print_r(array_change_key_case($arr, CASE_UPPER));
print_r(array_change_key_case_unicode_recurs($arr, CASE_UPPER));
?>

数组
(
[FIRST] => 1
[ZAżóŁć GęŚLą JAŹń] => Array
(
[yağ] => Oil
[şekER] => sugar
)
)
数组
(
[FIRST] => 1
[ZAŻÓŁĆ GĘŚLĄ JAŹŃ] => Array
(
[YAĞ] => Oil
[ŞEKER] => sugar
)
)
gsoft
1 年前
// 数组键大小写递归更改(Unicode)

<?php
function array_key_case($data,$case=FALSE)
{
$ret=array();
if (
is_array($data) )
foreach (
$data as $idx => $val)
$ret[$case ? mb_strtoupper($idx) : mb_strtolower($idx)]=array_key_case($val,$case);
else
$ret=$data;
return
$ret;
}
shaman_master at list dot ru
4 年前
<?php
/**
* 转换数组中的键。
*
* @param array $array 源数据
* @param callable $callback 函数名称 (strtolower, strtoupper, ucfirst, lcfirst, ucwords)
* @return array
*/
function array_convert_key_case(array $array, callable $callback = 'strtolower')
{
return
array_combine(
array_map($callback, array_keys($array)),
array_values($array)
);
}
?>
andreas dot schuhmacher87 at googlemail dot com
16 年前
支持多字节和多维数组,尽情享用!

<?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

/**
* 更改数组键的大小写
*
* 使用: array_change_key_case_ext(array('foo' => 1, 'bar' => 2), ARRAY_KEY_UPPERCASE);
* 结果: 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();

//为了提高速度,在全局命名空间中定义运行时创建的函数

//获取函数
if($useMB === false) {
$function = 'strToUpper'; //默认
switch($case) {
//第一个字符转为小写
case 25:
//可能lcfirst不可调用
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: //case 10:
$function = create_function('$input', '
return mb_strToLower($input, \''
. $mbEnc . '\');
'
);
}
}

//循环数组
foreach($array as $key => $value) {
if(
is_array($value)) //$value是一个数组,也处理键
$newArray[$function($key)] = array_change_key_case_ex($value, $case, $useMB);
elseif(
is_string($key))
$newArray[$function($key)] = $value;
else
$newArray[$key] = $value; //$key不是字符串
} //结束循环

return $newArray;
}
?>
NetPanther
11 年前
使用此方法将所有数组键的首字母大写

<?php

function ucfirstKeys(&$data)
{
foreach (
$data as $key => $value)
{
// 转换键
$newKey = ucfirst($key);

// 更改键(如果需要)
if ($newKey != $key)
{
unset(
$data[$key]);
$data[$newKey] = $value;
}

// 处理嵌套数组
if (is_array($value))
{
ucfirstKeys($data[$key]);
}
}
}

$test = array('foo' => 'bar', 'moreFoo' => array('more' => 'foo'));
ucfirstKeys($test);
print_r($test);

?>

结果
Array ( [MoreFoo] => Array ( [More] => foo ) [Foo] => bar )
Lus Henrique Pessoa
13 年前
<?php

// 改进之前的脚本
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);
}
}
}
}

// 与 array_change_key_case 相同
$arr = array('ID' => 1, 'NAME'=> 'Luis', 'Contact' => array('PHONE' => '3010-7148', 'E-MAIL' => '[email protected]') );
ack_r3($arr, CASE_LOWER,false);
var_dump($arr);

$arr = array('ID' => 1, 'NAME'=> 'Luis', 'Contact' => array('PHONE' => '3010-7148', 'E-MAIL' => '[email protected]') );
ack_r3($arr, CASE_LOWER,true);
var_dump($arr);

?>

输出

array(3) {
["id"]=>
int(1)
["name"]=>
string(4) "Luis"
["contact"]=>
array(2) {
["PHONE"]=>
string(9) "3010-7148"
["E-MAIL"]=>
string(12) "[email protected]"
}
}
array(3) {
["id"]=>
int(1)
["name"]=>
string(4) "Luis"
["contact"]=>
array(2) {
["phone"]=>
string(9) "3010-7148"
["e-mail"]=>
string(12) "[email protected]"
}
}
anon at ymous dot com
15 年前
以下是此函数的递归版本。

<?php
/**
* 递归的 array_change_key_case 函数。
* @param array $input
* @param integer $case
*/
function array_change_key_case_recursive($input, $case = null){
if(!
is_array($input)){
trigger_error("无效的输入数组 '{$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 参数 '{$case}' 无效.", 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;
}
?>
Luis Henrique Pessoa
13 年前
更改子数组键大小写的脚本

<?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' => '[email protected]') );
arrKey2Lower($arr);
var_dump($arr);


?>

输出

array(3) {
["id"]=>
int(1)
["name"]=>
string(4) "Luis"
["contact"]=>
array(2) {
["phone"]=>
string(9) "3010-7148"
["e-mail"]=>
string(12) "[email protected]"
}
}
john at doe dot com
16 年前
<?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
17 年前
我只是稍微修改了一下代码,这样你就不需要重复代码了。

<?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
)
*/
JOE
12 年前
将子数组键的大小写更改为小写。对我来说效果很好。希望对您有帮助。

<?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);

?>
oulala at yandex dot com
8 年前
递归地将数组键的第一个字母更改为小写

if(!function_exists("mb_lcfirstKeys")) {
function mb_lcfirstKeys($data) {
$res = [];
foreach ($data as $key => $value) {
$newKey = mb_lcfirst($key);
$res[$newKey] = is_array($value) ? mb_lcfirstKeys($value) : $value;
}
return $res;
}
}
wendri dot net at gmail dot com
1 年前
具有始终相同数量的子数组索引的划分数组。

<?php

function partitionFixedSubArray($array, $length, $empty_space)
{
$result = [];

if (
sizeof($array) ) {

$result = array_chunk($array, $length);
$last_array_count = sizeof(end($result));

if (
$last_array_count < $length) {

for (
$i = $last_array_count; $i < $length; $i++) {
array_push($result[key($result)], $empty_space);
}
}
}

return
$result;
}

$employees = [
"Paidi",
"Paijo",
"Darno",
"Kusnan",
"Mukidi",
"Sarno",
"Nurdin",
"Parmen",
"Sukinah",
"Sartini",
"Sukijan",
"Yono",
"Supoyo"
];

echo
"<pre>";
print_r(partitionFixedSubArray($employees, 5, "empty space"));
echo
"</pre>";

?>

输出
数组
(
[0] => Array
(
[0] => Paidi
[1] => Paijo
[2] => Darno
[3] => Kusnan
[4] => Mukidi
)

[1] => Array
(
[0] => Sarno
[1] => Nurdin
[2] => Parmen
[3] => Sukinah
[4] => Sartini
)

[2] => Array
(
[0] => Sukijan
[1] => Yono
[2] => Supoyo
[3] => empty space
[4] => empty space
)

)
ahmadz
7 年前
function convert_to_key_case($data, $case){

$condition = ($case == 'lowercase')? 'lowercase' : 'uppercase';
$test = [];
foreach($data as $key => $value) {
if ($condition == 'lowercase') {
$test[strtolower($key)] = $value;
} else {
$test[strtoupper($key)] = $value;
}
}
return $test;
}

$input = ['test1'=>1, 'Test2' => 2, 'TeSt3' => 3];

print_r(convert_to_key_case($input, 'uppercase'));
print_r(convert_to_key_case($input, 'lowercase'));

输出

数组
(
[TEST1] => 1
[TEST2] => 2
[TEST3] => 3
)

Array (
[test1] => 1
[test2] => 2
[test3] => 3
)
david at ramaboo dot com
15 年前
与 array_change_key_case 相同,只是针对值。这应该成为 PHP 的一部分!

<?php
/**
* @brief 返回所有值都小写或大写的数组。
* @return array 返回所有值都小写或大写的数组。
* @param object $input 要操作的数组
* @param int $case [可选] \c CASE_UPPER 或 \c CASE_LOWER(默认)。
*/
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;
}
}
?>
info at microweb dot lt
14 年前
一个简单的函数,可以将多维数组的所有值都改为大写。如果要改为小写,请将 "mb_strtoupper" 更改为 "mb_strtolower"。它对我来说很完美;)

<?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;
}
?>
charles
15 年前
<?php
$input_array
= array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER));
?>
To Top