Rumah > pembangunan bahagian belakang > tutorial php > 浅谈PHP源码十:关于array_keys,array_values函数

浅谈PHP源码十:关于array_keys,array_values函数

不言
Lepaskan: 2023-04-01 22:02:02
asal
2297 orang telah melayarinya

这篇文章主要介绍了关于浅谈PHP源码十:关于array_keys,array_values函数,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

新年的第一篇文章,首先给各位朋友拜年

今天有空看了下代码,写点东西,留作纪念!

array array_keys ( array input [, mixed search_value [, bool strict]] )

array_keys() 返回 input 数组中的数字或者字符串的键名。

如果指定了可选参数 search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回。自 PHP 5 起,可以用 strict 参数来进行全等比较(===)。

array_keys 函数的实现在standard/array.c文件的2416行 PHP_FUNCTION(array_keys)

程序依照PHP一贯的风格,先判断输入是否正确,如果有第三个参数,则判断大小的函数使用is_identical_function(默认情况下是使用 is_equal_function函数)
然后初始化返回的数组,遍历所给的数组,取每个元素的key值,赋值给返回的数组,这个key值又分为数字和字符串两种,其中最主要的函数是hash操作函数zend_hash_get_current_key_ex(取当前元素的key值)

  ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos){
    Bucket *p; 
    p = pos ? (*pos) : ht->pInternalPointer; 
    IS_CONSISTENT(ht);     if (p) {
        if (p->nKeyLength) {    //    数字型的nKeyLength长度为0
            if (duplicate) {
                *str_index = estrndup(p->arKey, p->nKeyLength - 1);
            } else {
                *str_index = p->arKey;    //    /* arKey存储key名称(字符串类型的key)必须是最后一个成员,*/
            }
            if (str_length) {
                *str_length = p->nKeyLength;
            }
            return HASH_KEY_IS_STRING;
        } else {
            *num_index = p->h;    //    存储数字key值
            return HASH_KEY_IS_LONG;
        }
    }
    return HASH_KEY_NON_EXISTANT;}
Salin selepas log masuk

对于此函数的理解主要是对bucket定义的了解

与bucket相关的内容请移步http://www.php.cn/php-weizijiaocheng-405316.html

array array_values ( array input )

array_values() 返回 input 数组中所有的值并给其建立数字索引。
array_values 函数与array_keys的函数实现基本类似,并且还少了一个zend_hash_get_current_key_ex操作和判断值类型的操作,

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

浅谈PHP源码九:关于array_unshift, array_push的介绍

浅谈PHP源码八:关于array_pop, array_shift的介绍

浅谈PHP源码七:关于nl2br, ltrim, rtrim, trim函数

Atas ialah kandungan terperinci 浅谈PHP源码十:关于array_keys,array_values函数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan