这是对我之前的一个问题的深入探讨:PHP关联数组中的项目不能以数字方式访问(即通过索引)?
根据W3Schools,:
在PHP中,有三种数组:
- 数值数组 - 具有数字索引的数组
- 关联数组 - 每个ID键与值相关联的数组
- 多维数组 - 包含一个或多个数组的数组
但这是准确的吗?可以为数组中的每个元素分配索引或字符串作为键 - 那么当两个元素在同一个数组中混合时会发生什么?
$myArray[0] = 'value1';
$myArray['one'] = 'value2';
Run Code Online (Sandbox Code Playgroud)
PHP中的所有数组都是相同的; 它们被实现为散列映射,它将键与值相关联,无论键的类型如何.
手册:
索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.
但是,如果一个数组同时具有数字和非数字索引,我仍称它为关联数组."联想"的含义仍然存在.
维基百科:
一个关联数组是唯一的密钥的集合和值的集合,其中每个键与一个值相关联(或值的集合)构成的抽象数据类型.
...
从计算机程序员的角度来看,关联数组可以被视为数组的泛化.虽然常规数组将整数键(索引)映射到任意数据类型的值,但关联数组的键也可以任意键入.在某些编程语言(如Python)中,关联数组的键甚至不需要是同一类型.
对于最后一句,同样适用于PHP,如示例所示.
PHP实际上没有数组.他们是字典.数字键与字符串键同时允许.它们可以混合并共存.
(实际上像"123"这样的字符串键总是被视为整数.PHP不保留它们的类型信息.)
如果你想要一个不同的行为,你可以实现和扩展ArrayObject.并且可以实现一个映射,其中数字键作为字符串索引的别名.