PHP中"关联"和"索引"数组之间的实际差异是什么?

Ala*_*orm 7 php arrays language-design data-structures

PHP数组类型实际上更类似于有序映射而不是传统C数组.它是PHP的原始通用数据结构.手册尽可能地说索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.

但是,在很多情况下,内置语言功能会区分"索引"数组(具有顺序,整数键的数组)和"关联"数组(具有非顺序和/或混合类型键的数组).

其中一个例子是array_merge函数.

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键.但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加.

如果只给出一个数组并且数组被数字索引,那么键将以连续的方式重新索引.

PHP中的其他地方有哪些区别在索引数组和关联数组之间?我对Userland的差异特别感兴趣,尽管对PHP源代码中的Array实现有任何了解也很有趣.

Ign*_*s R 5

实际上,任何数组,无论是索引还是关联,都是PHP中的哈希表(加上用于维护元素顺序的双向链表).但是,在用户态PHP代码中,索引和关联数组几乎总是用于不同的目的,有时需要以不同的方式处理,因此像sort/ 这样的几个函数asort仅为方便起见区分它们.


Dan*_*uis 3

我想到的最普遍的一个是索引数组可以使用传统for循环进行循环,而关联数组则不能(因为它没有数字索引):

for ($i = 0; $i < count($indexed_array); $i++)
{
  // do something with $indexed_array[$i]
}
Run Code Online (Sandbox Code Playgroud)

当然,php也有一个foreach关键字,它在两种类型上的作用是相同的。