PHP数组索引实现
PHP数组索引的实现方式
PHP数组本质上是有序映射(ordered map),支持数字索引和字符串键名(关联数组)。其底层通过哈希表(HashTable)实现,结合双向链表维护元素顺序。
数字索引数组
数字索引从0开始自动递增,可通过[]或array()初始化:
$arr = [10, 20, 30]; // 等价于 array(10, 20, 30)
echo $arr[1]; // 输出20
关联数组
使用字符串作为键名,显式指定键值对:
$user = [
'name' => 'Alice',
'age' => 25
];
echo $user['name']; // 输出Alice
混合索引
PHP允许数字和字符串键名混合使用:
$mixed = [
0 => 'zero',
'key' => 'value',
1 => 'one'
];
底层哈希表结构
PHP数组的哈希表实现特点:
- 使用
zend_array结构体(PHP7+) - 冲突解决采用链地址法
- 自动扩容机制(当填充因子达到阈值时)
动态增长特性
数组可动态添加元素,无需预定义大小:
$arr = [];
$arr[] = 'A'; // 自动分配索引0
$arr['x'] = 'B';
常用索引操作函数
array_keys():获取所有键名array_values():获取所有值isset($arr[$key]):检查键是否存在unset($arr[$key]):删除指定键
性能注意事项
- 大数据量时关联数组查找效率为O(1)
- 数字索引数组在内存中是连续存储的
unset()不会重新索引数字键,需用array_values()重建索引







