【问题标题】:PHP: What is the real meaning of an index in an indexed array?PHP:索引数组中索引的真正含义是什么?
【发布时间】:2014-10-13 01:26:53
【问题描述】:

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

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

当你将它传递给 array_pop() 时:

array_pop($arr);

“最后一个”元素将被弹出,其索引为零!

print_r($arr);

结果:

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

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

是只有 PHP 如此,还是所有语言都这样对待数组?

【问题讨论】:

  • 在现实世界中,您可能永远不会使用这样的数组。
  • php 完全按照你的要求去做,按顺序存储这些值,键是该死的。如果您希望键与您脑海中的某些人类逻辑顺序相匹配,请在其上运行 ksort()

标签: php arrays function debugging


【解决方案1】:

并非所有语言都这样做,但 PHP 会这样做,因为 PHP 有点奇怪。它或多或少地像字典一样实现数组。不过,PHP 确实提供了一些函数,例如 ksort,它可以让您按 key 对数组进行排序。

这就是:一个。数组也有索引,所以你得到的是一个数组,其中项目2 具有键0。这就是混乱开始继续的地方。

PHP:糟糕设计的分形有一个完整的chapter about arrays。有趣的阅​​读材料。 :)

【讨论】:

    【解决方案2】:

    这种行为的原因是因为arrays in PHP 实际上是无序映射

    因此,不要考虑根据索引来访问数组,而要考虑到。键可以是数字,也可以是字符串,但结果是一样的;您仍在使用地图,而不是真正的“数组”。

    一旦你接受了这个事实,你就会明白为什么 PHP 包含像 ksort() 这样的函数来按键对数组进行排序,以及为什么 array_pop() 并不总是删除最高的键值。

    【讨论】:

      【解决方案3】:

      这是一个 PHP 的东西。其他语言通常提供其他结构来提供 PHP 上数组的默认行为。例如,JavaScript 将始终对数组进行排序:

          a = [];
          > []
          a[1] = 'a';
          > "a"
          a[2] = 'b';
          > "b"
          a[0] = 'c';
          > "c"
          a
          > ["c", "a", "b"]
      

      在 Java 中,您需要使用 Hash Map 或其他东西来执行关联数组。 PHP 比其他语言更松散地处理数据结构。

      索引允许您识别和访问数组的元素。

      【讨论】:

        【解决方案4】:

        原因很简单HashTables

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

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

        所以 php 不能直接使用您分配的值,这就是为什么您可以将数组索引设置为 0 作为最后一个索引元素的原因。内部 php 使用具有“列表”的哈希表,其中索引值分配给数组中的哪个位置。

        【讨论】:

          猜你喜欢
          • 2014-10-10
          • 2015-07-16
          • 1970-01-01
          • 2016-11-04
          • 2012-06-01
          • 1970-01-01
          • 2013-05-25
          • 2014-09-28
          • 1970-01-01
          相关资源
          最近更新 更多