1 PHP_FUNCTION(array_change_key_case) 2 { 3 zval *array, *entry; 4 zend_string *string_key; 5 zend_string *new_key; 6 zend_ulong num_key; 7 zend_long change_to_upper=0; 8 9 if (zend_parse_parameters(ZEND_NUM_ARGS(), "a|l", &array, &change_to_upper) == FAILURE) { 10 return; 11 } 12 13 array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(array))); 14 15 ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_key, string_key, entry) { 16 if (!string_key) { // 数组键值为数字索引,将数组元素更新到return_value 17 entry = zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry); 18 } else { // 数组键值为字符串 19 // 字符串键值大小写转换 20 if (change_to_upper) { 21 new_key = php_string_toupper(string_key); 22 } else { 23 new_key = php_string_tolower(string_key); 24 } 25 // 将数组元素更新到return_value 26 entry = zend_hash_update(Z_ARRVAL_P(return_value), new_key, entry); 27 // 释放zend_string, 如果引用数位0,则释放内存。 28 zend_string_release(new_key); 29 } 30 // 增加引用 31 zval_add_ref(entry); 32 } ZEND_HASH_FOREACH_END(); 33 }
php内置函数分析之array_change_key_case()
猜你喜欢
转载自www.cnblogs.com/natian-ws/p/9141945.html
今日推荐
周排行