2011-09-11 157 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 

希望这会帮助你。