【问题标题】:php data structures suggestion needed需要php数据结构建议
【发布时间】:2011-09-11 19:00:44
【问题描述】:

我有 1000 个网址,格式为:

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 将是哈希键。

我的问题是我没有研究过 PHP,而只研究过 C++/Java 或 Perl。 我想要一个在 php 变量中包含 10,000 个这样的值的散列,我会将其序列化以将其永久存储在磁盘上。 对于每个页面加载,我都会动态创建存储的散列变量并搜索 url 作为散列的键。 它应该很快。我不确定 PHP 哈希是使用树图还是哈希图。好的,如果我使用 Hash map,我如何将 url 作为 key 均匀分配,以便所有 url 都进入单个存储桶?

欢迎任何想法。

【问题讨论】:

  • 看起来您正在使用 Joomla,为什么不使用内置的面包屑并节省自己的时间和精力??
  • Joomla 1.5 面包屑无法正常工作。我认为这是错误的。所以我自己完成了自定义编码来显示面包屑。

标签: php arrays


【解决方案1】:

您可以尝试使用简单的关联数组。 PHP 本机允许使用字符串作为数组索引。我不确定底层数据结构,但您可以随时对其进行基准测试。

【讨论】:

    【解决方案2】:

    PHP 的关联数组是哈希表(哈希映射)。

    它们接受任何字符串作为键,因此您可以直接使用 URL 作为键。

    您可以像这样创建一个数组并分配给它:

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

    然后使用serialize() 甚至var_export() 导出它(后者可能更快导入,尤其是使用操作码缓存)。

    这是一个哈希表,因此键被哈希以均匀分布在表中。该表根据需要增长以避免过多的冲突。你不必照顾这个。

    【讨论】:

    • 谢谢,但我的主要问题是这些 url(如上所述)将如何在关联数组中传播。在最坏的情况下,所有 url 都进入单个存储桶。如何让它们分布均匀?
    • 这是一个 hash 表,所以键被散列以实现均匀分布,你不必自己管理这个。仅供参考this is the hash function
    【解决方案3】:

    如果你想在这里使用数据结构以获得更快的输出,你可以使用 php 和redis。你可以检查下面的扩展。

    https://github.com/phpredis/phpredis
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多