php内置函数分析之array_change_key_case()
2024-10-07 08:09:23
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=; 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))); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_key, string_key, entry) {
if (!string_key) { // 数组键值为数字索引,将数组元素更新到return_value
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);
}
// 将数组元素更新到return_value
entry = zend_hash_update(Z_ARRVAL_P(return_value), new_key, entry);
// 释放zend_string, 如果引用数位0,则释放内存。
zend_string_release(new_key);
}
// 增加引用
zval_add_ref(entry);
} ZEND_HASH_FOREACH_END();
}
最新文章
- javascript 原型及原型链的初步理解
- [每日电路图] 9、介绍一种低价简单的4.2V锂电池充电及稳压(LDO)电路——RT9193,SD8017
- ReactNative真机运行指南
- SaltStack安装篇
- Javaweb上下文监听者ServletContextListener
- C语言 百炼成钢17
- VLAN是什么
- js生成二维码参数设置
- d010: 分离自然数
- eclipse中配置免安装tomcat7
- Codeforces Round #503 (by SIS, Div. 2)
- VC++全屏
- ASP.NET Core免费(视频)教程汇总
- hdu 5311(暴力)
- 设置新时间校正服务器NTP SERVER
- java多线程实例
- java中==和equals和hashcode的区别详解
- LRU算法---缓存淘汰算法
- Linux下安装paramiko
- [剑指Offer] 9.变态跳台阶
热门文章
- kafka-manager怎么查看topic里的数据量
- [论文笔记] Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment
- kaptcha Spring 整合
- ugui点击穿透判断
- tensorflow学习之tf.placeholder
- Python中文件读写之 w+ 与 r+ 到底有啥区别?
- 20191118 Spring Boot官方文档学习(4.9)
- 20191127 Spring Boot官方文档学习(5)
- [Git] 024 log 命令的补充
- spring mvc + xmlHttpRequest2.0 实现无刷新上传文件,带进度条和剩余时间