php - PHP和Mysql实现hashtable的步骤

标签 php mysql hashtable

我是编程语言的新手,我正在使用 PHP 和 mysql。我得到了一个在 php 中做哈希表的任务。我需要做的是,存储用户收集的项目,然后显示它。在网上做了一些研究后,我将在实现哈希表时执行以下步骤,如果我错了请指正:

  1. 设置表格:

    -> 用户表:uid(int[5]), username(varchar[128]), item_id(int[8], items_id_hash(int[50])

    -> 项目表:item_id(int[5]), item_name(varchar[128]), items_id_hash(int[50])

  2. 创建哈希函数(如何创建哈希函数?自己创建还是从网上获取?)将键值转换为哈希值,然后插入数据库。例如:将 item_id = 001 散列到散列值 =(例如)12345。然后插入用户表。

  3. 显示/搜索。从用户中检索哈希值,然后将其与项目表进行比较并显示。

问题:

  1. 我的步骤正确吗?
  2. 我在哪里可以找到一个好的 php 散列函数?我可以使用 md5 或 sha1 或 salt 吗?

最佳答案

我认为您关于哈希表的想法有点 [defunct]。哈希表将键分解为相似的列表。例如:基于姓名首字母的哈希表,因此会有 26 个列表。您的散列是名称的第一个字母,这样可以更快地进行搜索。

md5, sha1 用于导出用于验证数据未被篡改的哈希值。它们通常有 128 位或 160 位版本。因此,它获取 X 数据并通过散列将其发送,以得出一个 128 位字母数字字符串,无论在何处完成,该字符串都应该相同。这通常是安全问题。

编辑:扩展如何派生 key 的问题。

您可以利用数据的模数来创建用于行的键。在示例数据 % X 中,其中 X 是您想要的 key 总数。问题是 X 很难找到;如果您有 20 个项目,那么将 X 变成 20 是可行的,并且可以快速搜索,因为每个项目都有自己的行。但是,如果您有 1000 个项目,那么执行 %1000 是不可行的。做 X = 75 这样的事情会更好。

关于php - PHP和Mysql实现hashtable的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539816/

相关文章:

mysql - 需要部分匹配的 SQL 查询

java - 在 ConcurrentSkipListMap Java 中插入空值

php - PHP 中的对象运算符 (->)

PHP 命名信号量?

php - Wordpress - 在管理选项页面中提交表单时将值保存到数组

MySQL 链接表 - View 、外键或触发器?

MySql WorkBench AES 256 解密

scheme - 如何映射哈希表的值( Racket )

c - 字谜解算器 C

php - Laravel 5.4 升级后的 BroadcastServiceProvider.php 和 Broadcaster.php 问题