0

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

4

2 回答 2

3

如果我正确理解您的问题,那么您处于这种情况:

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

$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"
}

如果这就是您的意思,则此行为在array 的文档中进行了描述:

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

请注意,用于此的最大整数键当前不需要存在于数组中。自上次重新索引数组以来,它只需要在某个时间存在于数组中。

(有一个例子)

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

于 2009-07-22T04:21:07.890 回答
0

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

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

于 2009-07-22T00:00:55.523 回答