PHP Conference Japan 2024

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 的所有键,已转换为小写或大写。编号索引保持不变。

参数

array

要处理的数组

case

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”),则数组中后面的值将覆盖其他索引。

添加注释

用户贡献的注释 12 个注释

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
)
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));
}
zhangxuejiang
5 年前
我改进了 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));
}
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Źń] => 数组
(
[yağ] => Oil
[şekER] => sugar
)
)
数组
(
[FIRST] => 1
[ZAŻÓŁĆ GĘŚLĄ JAŹŃ] => 数组
(
[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;
}
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); //使用多字节函数

/**
* 更改数组键的大小写
*
* 使用: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;
}
?>
shaman_master at list dot ru
5 年前
<?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)
);
}
?>
NetPanther
12 年前
使用此方法将所有数组键的首字母大写

<?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 )
anon at ymous dot com
16 年前
下面是此函数的递归版本。

<?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;
}
?>
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(
'未知类型');
}
}

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
)
*/
john at doe dot com
17 年前
<?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;
}
?>
wendri dot net at gmail dot com
2 年前
分区数组,每个子数组的索引数量始终相同。

<?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] => 数组
(
[0] => Paidi
[1] => Paijo
[2] => Darno
[3] => Kusnan
[4] => Mukidi
)

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

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

)
To Top