2010-01-04 48 views
1

我有一個特定的順序的項目列表,所以我已經決定將它們存儲在一個數組如何獲得一個關鍵的一個指標,我知道是唯一的在一個數組

$items = array(
    "apple", 
    "banana", 
    "pear" 
); 

如果程序用參數「香蕉」調用我需要能夠說「蘋果」來之前和「梨」之後。目前我正在做這樣的事情:

foreach($items as $k=>$v) { if ($v == "banana") { $current_key = $k } 

所以,現在我知道,$ current_key -1是以前和+1是下一個。它的工作原理,它只是感覺醜陋迭代整個陣列。有一個更好的方法嗎?

UPDATE 如果有人關心,我決定做一些快速測試,看看獲取信息的方式有多快。在1000次迭代,6000個項目組成的數組,microtime中retunred:

我的發佈方式:4.567 Array_Search:2.749

雖然我想我也嘗試了存儲陣列的排列像數據的方法:

$items['banana']['next'] = 'pear'; 
$items['banana']['prev'] = 'apple'; 

這當然是英里(0.0005)的贏家。這些都不是真的有意義,我只是好奇,想和任何讀這個的人分享。

+0

對不起,但我覺得有必要挑剔你的術語:「蘋果」,「香蕉」和「梨」是不是在你的例子鑰匙,他們是價值。它們將是以下示例中的鍵:array(「apple」=>「round」,「banana」=>「long」,「pear」=>「oblong」)。 你所說的$ current_key可以更好地描述爲遊標或索引。 – 2010-01-04 20:21:50

+0

是的,並且即時使用VALUE查找示例中的KEY ...您會注意到$ current_key的值被設置爲數組索引,而不是數值。然而,這個標題是錯誤的,因爲我得到了一個我認爲是唯一的值的索引: – Erik 2010-01-04 20:37:31

回答

5

array_search()應該爲您節省循環。

+0

另外,如果你需要的不僅僅是第一個,array_keys()可能是有用的:http: //php.net/manual/en/function.array-keys.php – 2010-01-04 20:03:49

+0

這個問題說明它絕對是獨一無二的,但很整齊。我從來不知道array_keys接受了第二個參數。 – Matchu 2010-01-04 20:06:14

+0

工程就像我的魅力。我甚至做了一些快速microtime()測試,它在小陣列上的運行速度是其兩倍。不知道它是如何在一個大的票價。 :) – Erik 2010-01-04 20:19:51

相關問題