想像你正在添加幾個元素的數組:
$array[] = 'dog';
$array[] = 'cat';
$array[32] = 'lachupacabra';
$array[] = 'cow';
你知道會有什麼指數「牛」?沒有?直到我發現它是33,我也沒有。這似乎是合乎邏輯的,php應該引用添加到數組中的最後一個元素,並且在使用方括號語法添加元素時,它需要先前的元素,將其索引增量爲1並將遞增的指數與新值相關聯。但是停下來,如果先前增加了索引,這可能會造成麻煩。例如:
$array[] = 'dog';
$array[33] = 'cat';
$array[32] = 'lachupacabra';
$array[] = 'cow';
gues是什麼,'cow'的索引是34.這是否意味着PHP在添加另一個與方括號語法之前測試所有密鑰?這會產生O(N)的複雜性,或者它存儲的內容在某處存在某種值,操作將具有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主要是 – Lu4 2011-02-03 19:52:01
@ nikic的方法會給你最後一個鍵,`end($ arr)`會給你最後一個元素。如果你關心最後一把鑰匙,似乎你正在按照錯誤的順序做某件事。 – mfonda 2011-02-03 19:54:05