想象一下,您正在向数组中添加几个元素:
$array[] = 'dog';
$array[] = 'cat';
$array[32] = 'lachupacabra';
$array[] = 'cow';
你知道'牛'会有什么指数吗?没有?在我发现它是33之前我都没有。这似乎是合乎逻辑的,php应该引用添加到数组的最后一个元素,并且添加带方括号的元素语法时它需要前一个元素,将它的索引递增一个并将递增的索引与新值相关联。但是停止,如果先前添加了递增的索引,这可能会导致麻烦。例如:
$array[] = 'dog';
$array[33] = 'cat';
$array[32] = 'lachupacabra';
$array[] = 'cow';
猜是什么,'牛'的索引是34。这是否意味着php在使用方括号语法添加另一个键之前测试所有键?这将具有O(N)复杂性,或者在内部某处存储类似$max_key
值的内容,操作将具有O(1)复杂度但是将使用额外的内存?
问题#1:'[]'操作有多复杂?
问题2:如何获得添加元素的索引?
(关于问题#2,如果你不介意,我更喜欢O(1)操作)
修改
我需要实现以下方法:
class X {
private $array;
public function AddItem($item) {
$array[] = 'new value';
return get_highest_index_with_o_1_comlexity($array);
}
public function RemoveItem($index) {
unset($this->array[$index]);
}
}