2011-07-12 160 views
2

有沒有辦法從任何位置訪問多維數組?例如:多維數組

$arr = array (

    1 => array (1, 'some-url-one', 'Some Title One'), 

    2 => array (2, 'some-url-two', 'Some Title Two'), 

    3 => array (2, 'some-url-three', 'Some Title Three'), 

); 

然後,如果我們有一個項目的ID,例如2,並希望得到該項目的冠軍,我們簡單地使用:

$title = $arr[2][2]; // which outputs Some Title Two 

如果我們想要得到的同一項目的URL,我們簡單地使用:

$title = $arr[2][1]; // which outputs some-url-two 

但如果我們有URL(有些-URL二),並希望得到該項目的ID或標題?

有2個義務:通過數組

1循環,並檢查該URL存在 2-得到id和標題

如何做到這一點的最好方法是什麼?我已經有3個數組:

1號到URL

2-網址爲ID

3- ID所有權

$id2url = array (

    1 => 'some-url-one', 
    2 => 'some-url-two', 
    3 => 'some-url-three' 

); 

而且兩個人是相同的過程。所以我想通過組合3個數組來優化我的代碼。所以如何使用給定的url訪問id和標題?

謝謝。

回答

2

你可能尋找array_flip()PHP Manual,它會使你的查找數組與他們的價值觀工作作爲鍵:

$id2url = array (

    1 => 'some-url-one', 
    2 => 'some-url-two', 
    3 => 'some-url-three' 

); 

$url2id = array_flip($id2url); // keys will become values, and values keys. 

$id = $url2id[$url]; 

$title = $arr[$id][2]; 
+0

和三人陣列如上所述? – medk

+1

這不起作用,鍵只能是整數或字符串,但不能是數組。所以你需要一個數組作爲lookup-hash。這是多維數組的索引。 – hakre

+0

這是一個普遍的搜索問題 - 標準的方法是建立一個倒排索引,這就是array_flip()在這裏所做的。如果數組相對較小,則可能不關心O(n)查找......否則,如果這是從數據庫中提取的數據,則可以在URL列中添加一個索引。 – fearlesstost

1

您可以使用array_search這樣的:

$id = array_search($url, $url2id); 
0

有一個更簡單的方法處理這個我認爲。如果您已經擁有該URL,那麼您可能已經擁有所有數據的父數組中的索引。在這種情況下,你可以簡單地用這個

$found_id = $arr[$known_parent_idx][0]; 
$found_title = $arr[$known_parent_idx][2]; 

訪問它但是,如果你沒有這樣的索引,那麼你可以做一個循環爲基礎的檢查,像這樣。假設你在這個多維數組中循環,這裏就是這個工作原理。

foreach ($arr AS $idx => $subarr) 
{ 
    if ($subarr[1] == $known_url) 
    { 
    $found_id = $subarr[0]; 
    $found_title = $subarr[2]; 
    } 
} 

現在,如果URL也是父索引,那麼現在可以使這更容易了。在這種情況下,我們正在討論一個關聯數組。這是一個更有用的結構。

$arr = array (
    'some-url-one' => array ('id' => 1, 'title' => 'Some Title One'), 
    'some-url-two' => array ('id' => 2, 'title' => 'Some Title Two'), 
    'some-url-three' => array ('id' => 2, 'title' => 'Some Title Three'), 
); 

這將讓你瞬間找到你沒有任何搜索找什麼都沒有。但是這要求URL在每種情況下都是唯一的。