【问题标题】:Why, when I append to an empty array in PHP, is the index 2?为什么,当我在 PHP 中追加一个空数组时,索引是 2?
【发布时间】:2010-11-12 20:08:00
【问题描述】:

我在一个类中有一个方法,它将一个项目附加到该类的数组成员中。当数组成员为空(但之前在索引 1 和索引 2 处有两个项目)并且我调用该方法时,该项目被插入到索引 2。这是为什么呢?如果有人不立即知道,我可以提供更多详细信息。

【问题讨论】:

  • 你是如何清空数组的? $var = 数组();或未设置($var[1]);一些代码会有所帮助
  • 如何编辑您的答案以包含一些代码 - 一个最小的测试用例证明这将非常有用。另外,这是哪个版本的PHP?

标签: php arrays indexing append


【解决方案1】:

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

你首先有一个这样的数组:

$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(零)。

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

(还有一个例子)

希望我正确理解了这个问题(否则,您能否提供代码示例、实际输出以及您期望的输出?),这会有所帮助 :-)

【讨论】:

  • 你完全理解了这个问题,并按照它的要求回答了它。问题是我没有完全理解我的问题。我什至阅读了该数组文档,但我认为发生了其他事情:P 谢谢。
【解决方案2】:

你确定数组是空的吗?如果你print_r($obj->memberArray),你看到Array()了吗? count($obj->memberArray)的值是多少?

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

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2022-11-24
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2020-09-01
    • 2019-12-21
    相关资源
    最近更新 更多