php内置函数分析之array_change_key_case()

 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 }

猜你喜欢

转载自www.cnblogs.com/natian-ws/p/9141945.html