我在一个类中有一个方法,它将一个项目附加到类的数组成员中。当数组成员为空(但以前在索引 1 和索引 2 处有两个项目)并且我调用该方法时,该项目被插入到索引 2。这是为什么呢?如果有人不立即知道,我可以提供更多详细信息。
2 回答
如果我正确理解您的问题,那么您处于这种情况:
你首先有一个像这样的数组:
$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(零)。
请注意,用于此的最大整数键当前不需要存在于数组中。自上次重新索引数组以来,它只需要在某个时间存在于数组中。
(有一个例子)
希望我正确理解了这个问题(否则,您能否提供代码示例、实际输出和您期望的输出?),这会有所帮助:-)
你确定数组是空的吗?如果你print_r($obj->memberArray)
,你看到了Array()
吗?的价值是count($obj->memberArray)
多少?
另外,键有意义吗?如果不是,并且您希望数组为空,您应该能够安全地运行$obj->memberArray = array_keys($obj->memberArray)
以重置密钥。我有一种预感,PHP 在处理具有混合(一些数字,一些字符串)索引的数组时会做一些奇怪的事情,并且在这种情况下可能会开始保留索引,附加在最后一个数字索引之后。只是预感,没有测试过。