代码之家  ›  专栏  ›  技术社区  ›  Steven Oxley

为什么,当我在PHP中附加到一个空数组时,索引是2?

  •  0
  • Steven Oxley  · 技术社区  · 17 年前

    我在类中有一个方法,它将向类的数组成员追加一个项。当数组成员为空(但以前在索引1和索引2中有两个项)并且我调用该方法时,该项将在索引2中插入。为什么会这样?如果有人不立刻知道,我可以提供更多的细节。

    2 回复  |  直到 17 年前
        1
  •  3
  •   Pascal MARTIN    17 年前

    如果我正确理解你的问题,你就处于这种情况:

    首先有一个这样的数组:

    $data = array(
        1 => 'abcd',
        2 => 'efg',
    );
    var_dump($data);
    

    您可以取消设置所有元素:

    unset($data[1], $data[2]);
    var_dump($data);
    

    当您像这样插入数据时:

    $data[] = 'glop';
    var_dump($data);
    

    它不是放在指标0上,而是2(实际上,它是放在指标3上,看起来——最后一个现有指标,加上一个),最后给出了这个数组:

    array(1) {
      [3]=>
      string(4) "glop"
    }
    

    如果这就是你的意思,这种行为在 documentation of array :

    如上所述,如果没有钥匙 指定,现有的 采用整数索引,新的 键将是最大值加1。 如果还不存在整数索引,则 键将为0(零)。

    注意使用的最大整数键 因为目前不需要存在于 数组。它只需要存在 在数组中 上次重新索引数组时。

    (还有一个例子)

    希望我理解的对 (否则,您能否提供代码、实际输出和预期输出的示例?) ,这有助于:—)

        2
  •  0
  •   eyelidlessness    17 年前

    您确定数组是空的吗?如果你 print_r($obj->memberArray) 你看到了吗? Array() ?价值是什么 count($obj->memberArray) ?

    而且,这些关键点有意义吗?如果不是,并且您希望数组为空,则应该能够安全地运行 $obj->memberArray = array_keys($obj->memberArray) 重置按键。我有一种预感,当处理带有混合(一些数字,一些字符串)索引的数组时,PHP会做一些奇怪的事情,在这种情况下,可能会开始保留索引,在最后一个数字索引之后追加索引。只是一种预感,还没有测试过。

    推荐文章