PHP中的数字和关联数组是两个不同的东西吗?

Yar*_*rin 3 php arrays

这是对我之前的一个问题的深入探讨:PHP关联数组中的项目不能以数字方式访问(即通过索引)?

根据W3Schools,:

在PHP中,有三种数组:

  • 数值数组 - 具有数字索引的数组
  • 关联数组 - 每个ID键与值相关联的数组
  • 多维数组 - 包含一个或多个数组的数组

但这是准确的吗?可以为数组中的每个元素分配索引或字符串作为键 - 那么当两个元素在同一个数组中混合时会发生什么?

$myArray[0] = 'value1';
$myArray['one'] = 'value2';
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 6

PHP中的所有数组都是相同的; 它们被实现为散列映射,它将键与值相关联,无论键的类型如何.

手册:

索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.

但是,如果一个数组同时具有数字和非数字索引,我仍称它为关联数组."联想"的含义仍然存在.

维基百科:

一个关联数组是唯一的密钥的集合和值的集合,其中每个键与一个值相关联(或值的集合)构成的抽象数据类型.

...

从计算机程序员的角度来看,关联数组可以被视为数组的泛化.虽然常规数组将整数键(索引)映射到任意数据类型的值,但关联数组的键也可以任意键入.在某些编程语言(如Python)中,关联数组的键甚至不需要是同一类型.

对于最后一句,同样适用于PHP,如示例所示.


mar*_*rio 6

PHP实际上没有数组.他们是字典.数字键与字符串键同时允许.它们可以混合并共存.

(实际上像"123"这样的字符串键总是被视为整数.PHP不保留它们的类型信息.)

如果你想要一个不同的行为,你可以实现和扩展ArrayObject.并且可以实现一个映射,其中数字键作为字符串索引的别名.