说,我们制作一个这样的数组:
$arr = Array
(
2 => 'c',
1 => 'b',
0 => 'a'
);
将它传递给array_pop():
array_pop($arr);
并且“最后”元素将被关闭,其索引为零!!
print_r($arr);
结果:
Array
(
[2] => c
[1] => b
)
那么,索引的目的是什么? 这不是说“关联数组的数字键”的另一种方式吗?
这只是PHP剂量,还是所有语言都对待这样的数组?
答案 0 :(得分:4)
并非所有语言都这样做,但PHP确实如此,因为PHP有点奇怪。它实现了或多或少像字典的数组。 PHP确实提供了一些函数,如ksort
,它允许您通过 key 对数组进行排序。
这就是:键。数组也有索引,所以你得到的是一个数组,其中项2
有键0
。这就是混乱开始的地方。
PHP:糟糕设计的分形有一个完整的chapter about arrays。有趣的阅读材料。 :)
答案 1 :(得分:2)
此行为的原因是arrays in PHP实际上是无序地图。
因此,不要考虑使用索引来访问数组,而是根据 keys 来考虑它。键可以是数字,它们可以是字符串,但结果是相同的;你还在使用地图,而不是真正的“数组”。
一旦你接受了这个事实,你就会明白为什么PHP包含像ksort()这样的函数来按键排序数组,以及为什么array_pop()并不总是删除最高的键值。
答案 2 :(得分:1)
这是PHP的事情。其他语言通常提供其他结构来提供PHP上数组的默认行为。例如,JavaScript将始终对数组进行排序:
a = [];
> []
a[1] = 'a';
> "a"
a[2] = 'b';
> "b"
a[0] = 'c';
> "c"
a
> ["c", "a", "b"]
在Java中,您需要使用哈希映射或其他东西来执行关联数组。 PHP比其他语言更松散地处理数据结构。
索引允许您识别和访问数组的元素。
答案 3 :(得分:1)
原因很简单HashTables
。
经常使用HashTables
。基本上数组是内存中的一些数据,就像在C
中一样 - 数组索引只能保存整数值但不能保存在php
中。
php用哈希表解决了这个问题。如果您将索引示例foo
设置为此值,则不会将此值直接指定为foo
,它会被哈希处理,并可能以000000000111
和其他哈希函数结束内部。
因此php不能直接使用您指定的值,这就是您可以将0
之类的数组索引设置为最后一个索引元素的原因。内部php工作的哈希表有一个"列表"使用索引值分配给数组中哪个位置的值。