2011-09-11 203 views
1

我有網址的1000在形式:PHP數據結構的建議需要

http://www.downloadformsindia.com/index.php?option=com_download&e=n&task=showpage&file=Forms%252Fmisc%252Ficc%252Fhdfcbank%252FBlocking%20ATM%20and%20Debit%20Card%20Form.pdf&title=HDFC%3ABlocking%2BATM%2B%26%2BDebit%2BCard%2BForm&code=igi 

每個網址我想存儲相關的痕跡。所以每當像這樣的URL被訪問時,我會顯示它是麪包屑。

所以我想要一個地圖來存儲URL的麪包屑。 URL的將是散列鍵。

我的問題是,我沒有在PHP上工作,但只在C++/Java或Perl上工作。 我想要一個散列,其中包含一個php變量中的萬個這樣的值,我將其序列化爲永久存儲在磁盤上。 對於每個頁面加載,我會立即創建存儲的散列變量並搜索該URL作爲散列的關鍵字。 它應該是相當快的。我不確定PHP哈希是否使用Tree Map或Hash Map。好吧,如果我去哈希地圖,我怎麼平均分配的網址作爲關鍵,使所有的網址都進入單桶?

任何想法歡迎。

+0

看起來你正在使用Joomla,爲什麼不使用內置的麪包屑並節省你自己的時間和精力? –

+0

Joomla 1.5麪包屑無法正常工作。我認爲這是越野車。所以我做了自定義編碼來自己顯示麪包屑。 – user911216

回答

1

您可以嘗試使用簡單的關聯數組。 PHP本地允許使用字符串作爲數組索引。我不確定底層的數據結構,但您可以隨時對其進行基準測試。

1

PHP的關聯數組是哈希表(散列圖)。

它們接受任何字符串作爲關鍵字,因此您可以直接使用這些URL作爲關鍵字。

您只需創建一個數組,並分配給它這樣的:

$data = array(); 
$data[$url] = $data_for_this_url; 

而且隨着serialize()甚至var_export()導出(以後可能會更快導入,尤其是操作碼緩存)。

這是一個散列表,所以密鑰被哈希值均勻分佈在表中。該表根據需要增長以避免太多衝突。你不必處理這件事。

+0

謝謝,但我的主要問題是這些網址(如上所述)將如何在關聯數組中傳播。在最糟糕的情況下,所有網址都會進入單個存儲分區。如何使它們均勻分佈? – user911216

+0

這是一個** hash **表,所以密鑰被哈希以實現均勻分佈,您不必管理這個你自己。 FYI [這是散列函數](https://github.com/php/php-src/blob/0611a4d6fff81c22cd85b88496f82cfcc146dcb0/Zend/zend_hash.h#L261) – arnaud576875

0

如果你想在這裏使用數據結構來獲得更快的輸出,你可以使用php和redis。你可以檢查下面的擴展名。

https://github.com/phpredis/phpredis 

希望這會幫助你。