Php:方括号添加函数的复杂性[即O(N),O(1),...]是多少?即$ x [] ='价值'

时间:2011-02-03 19:43:51

标签: php arrays

想象一下,您正在向数组中添加几个元素:

$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]);
}
}

2 个答案:

答案 0 :(得分:2)

要获取数组中最后一个元素的键,请使用:

end($array);
$key = key($array);

end将光标定位在数组的最后一个元素上,key返回当前光标位置的键。

答案 1 :(得分:0)

使用[]时,PHP使用(最大索引+ 1)作为下一个索引。例如,如果您有$arr = array(42 => 'foo'),则分配的下一个元素将具有键43。数组插入在固定时间内发生。担心这件事是非常愚蠢的。