PHP:索引数组中索引的真正含义是什么?

时间:2014-08-19 19:58:58

标签: php arrays function debugging

说,我们制作一个这样的数组:

$arr = Array
(
            2 => 'c',
            1 => 'b',
            0 => 'a'
);

将它传递给array_pop():

array_pop($arr);

并且“最后”元素将被关闭,其索引为零!!

print_r($arr);

结果:

Array
(
    [2] => c
    [1] => b
)   

那么,索引的目的是什么? 这不是说“关联数组的数字键”的另一种方式吗?

这只是PHP剂量,还是所有语言都对待这样的数组?

4 个答案:

答案 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

php内部函数中的

经常使用HashTables。基本上数组是内存中的一些数据,就像在C中一样 - 数组索引只能保存整数值但不能保存在php中。

php用哈希表解决了这个问题。如果您将索引示例foo设置为此值,则不会将此值直接指定为foo,它会被哈希处理,并可能以000000000111和其他哈希函数结束内部。

因此php不能直接使用您指定的值,这就是您可以将0之类的数组索引设置为最后一个索引元素的原因。内部php工作的哈希表有一个"列表"使用索引值分配给数组中哪个位置的值。