在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
PHP有数据的一个非常重要的一类,就是关联数组。又称为哈希表(hash table),是一种很好用的数据结构。
在程序中。我们可能会遇到须要消重的问题,举一个最简单的模型: 有一份username列表。存储了 10000 个username,没有反复项; 另一份黑名单列表,存储了 2000 个username,格式与username列表同样。 如今须要从username列表中删除处在黑名单里的username,要求用尽量快的时间处理。 这个问题是一个小规模的处理量,假设实际一点,2 个表都可能非常大,比方有 2 亿条记录。
01 <?php
02 foreach($arrayM as $keyM => $nameM) { 03 foreach($arrayN as $nameN) { 04 if ($nameM == $nameN) { 05 // 本行运行了 M * N 次! 06 unset($arrayM[$keyM]); 07 } 08 } 09 } 10 return $arrayM; 11 ? > 还有一种方式,利用数组索引。 PHP 是一种弱类型的语言,不像 C 语言那样有严格的变量类型限制。C 语言的数组。每个元素的类型必须一致。并且索引都是从 0 開始。 PHP 的数组,能够用字符串作为索引,也称为关联数组。 数组索引,有一个天然的限制就是不会反复。并且訪问的时候不须要查找,能够直接定位。
01 <?php
02 $arrayHash = array(); 03 foreach($arrayN as $nameN) { 04 // 本行运行了 N 次。 05 $arrayHash[$nameN] = 1; 06 } 07 08 foreach($arrayM as $keyM => $nameM) { 09 if (isset($arrayHash[$nameM])) { 10 // 本行运行了 M 次! > 能够看到,优化过的代码,循环次数是 M + N 次。 假如 M 和 N 都是 10000,优化前,循环了 1 亿次;优化后。仅仅循环了 20000 次。差了 5000 倍。 假设第二个程序耗时 1 秒。则第一个程序须要将近一个半小时!
这个就是上面这个算法的一个问题了。即它不能保证一个唯一性。所以就出现了非常多hash算法的研究,如MD4,MD5,SHA-1等,来保证唯一性。
版权声明:本文博主原创文章,博客,未经同意不得转载。 |
2022-08-17
2022-11-06
2022-07-08
2022-07-22
2022-08-17
请发表评论