2011-02-03 28 views
1

想像你正在添加幾個元素的數組:

$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

要獲得一個陣列中使用的最後一個元素的關鍵:

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

end位置光標數組的最後一個元素上,key返回在當前光標位置的關鍵。

0

當使用[]時,PHP使用(最大索引+ 1)作爲下一個索引。例如,如果您有$arr = array(42 => 'foo'),則分配的下一個元素將具有密鑰43。數組插入發生在固定時間。擔心這件事是非常愚蠢的。

+0

確定,但問題#2主要是 – Lu4 2011-02-03 19:52:01

+2

@ nikic的方法會給你最後一個鍵,`end($ arr)`會給你最後一個元素。如果你關心最後一把鑰匙,似乎你正在按照錯誤的順序做某件事。 – mfonda 2011-02-03 19:54:05

相關問題