PHP 数组的底层实现是散列表(也叫 hashTable ),散列表是根据键(Key)直接访问内存存储位置的数据结构,它的key - value 之间存在一个映射函数,可以根据 key 通过映射函数得到的散列值直接索引到对应的 value 值,无需通过关键字比较,在理想情况下,不考虑散列冲突,散列表的查找效率是非常高的,时间复杂度是 O(1)。
typedef struct _zend_array zend_array;
typedef struct _zend_array hashTable;
struct _zend_array {
zend_refcounted_h gc;
union {
struct {
ZEND_ENDIAN_LOHI_4(
zend_uchar flags,
zend_uchar nApplyCount,
zend_uchar nIteratorsCount,
zend_uchar reserve)
} v;
uint32_t flags;
} u;
uint32_t nTableMask; // 哈希值计算掩码,等于nTableSize的负值(nTableMask = -nTableSize)
Bucket *arData; // 存储元素数组,指向第一个Bucket
uint32_t nNumUsed; // 已用Bucket数(含失效的 Bucket)
uint32_t nNumOfElements; // 哈希表有效元素数
uint32_t nTableSize; // 哈希表总大小,为2的n次方(包括无效的元素)
uint32_t nInternalPointer; // 内部指针,用于遍历
zend

本文深入探讨了PHP7中数组的实现原理,指出其基于散列表(hashTable),这是一种通过键值映射实现高效访问的数据结构。散列表通过映射函数将key转化为散列值,直接索引value,理想情况下查找复杂度为O(1),显著提升了PHP数组的操作速度。

1834

被折叠的 条评论
为什么被折叠?



