Ala*_*orm 7 php arrays language-design data-structures
PHP数组类型实际上更类似于有序映射而不是传统C数组.它是PHP的原始通用数据结构.手册尽可能地说索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.
但是,在很多情况下,内置语言功能会区分"索引"数组(具有顺序,整数键的数组)和"关联"数组(具有非顺序和/或混合类型键的数组).
其中一个例子是array_merge函数.
如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键.但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加.
如果只给出一个数组并且数组被数字索引,那么键将以连续的方式重新索引.
PHP中的其他地方有哪些区别在索引数组和关联数组之间?我对Userland的差异特别感兴趣,尽管对PHP源代码中的Array实现有任何了解也很有趣.
实际上,任何数组,无论是索引还是关联,都是PHP中的哈希表(加上用于维护元素顺序的双向链表).但是,在用户态PHP代码中,索引和关联数组几乎总是用于不同的目的,有时需要以不同的方式处理,因此像sort
/ 这样的几个函数asort
仅为方便起见区分它们.
我想到的最普遍的一个是索引数组可以使用传统for
循环进行循环,而关联数组则不能(因为它没有数字索引):
for ($i = 0; $i < count($indexed_array); $i++)
{
// do something with $indexed_array[$i]
}
Run Code Online (Sandbox Code Playgroud)
当然,php也有一个foreach
关键字,它在两种类型上的作用是相同的。