array_change_key_case() 将 array 数组中的所有键名改为全小写或大写。本函数不改变数字索引。
array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )
参数:
array
需要操作的数组。
case
可以在这里用两个常量,CASE_UPPER 或 CASE_LOWER(默认值)。
返回值:
返回一个键全是小写或者全是大写的数组;如果输入值(array)不是一个数组,那么返回FALSE
错误/异常 :
如果输入值(array)不是一个数组,就会抛出一个错误警告(E_WARNING)。
使用例子:
Array
(
[FIRST] => 1
[SECOND] => 4
)
PHP源码解析:
PHP_FUNCTION(array_change_key_case)
{
zval *array, *entry; //传入的数组,中间变量
zend_string *string_key; //字符串索引
zend_string *new_key; //字符串转换赋值的中间变量
zend_ulong num_key; //数字索引
zend_long change_to_upper=0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "a|l", &array, &change_to_upper) == FAILURE) {
return; //验证传入的数据
}
array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(array))); //初始化return_value,Z_ARRVAL_P是(zval).value.arr
//zend_hash_num_elements是一个宏(ht)->nNumOfElements,ht是传入的参数
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_key, string_key, entry) { //循环这个数组
if (!string_key) {
entry = zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry);
} else {
if (change_to_upper) {
new_key = php_string_toupper(string_key); //把键值转为大写
} else {
new_key = php_string_tolower(string_key); //把键值转为小写
}
entry = zend_hash_update(Z_ARRVAL_P(return_value), new_key, entry); //插入到返回的数组中
zend_string_release(new_key); //释放中间变量
}
zval_add_ref(entry);
} ZEND_HASH_FOREACH_END(); //循环结束
}
“`