哪个PHP函数使用这种哈希算法?

时间:2010-11-19 07:17:15

标签: php c hash php-internals

   1. static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
   2. {
   3.     register ulong hash = 5381;
   4.  
   5.     /* variant with the hash unrolled eight times */
   6.     for (; nKeyLength >= 8; nKeyLength -= 8) {
   7.         hash = ((hash << 5) + hash) + *arKey++;
   8.         hash = ((hash << 5) + hash) + *arKey++;
   9.         hash = ((hash << 5) + hash) + *arKey++;
  10.         hash = ((hash << 5) + hash) + *arKey++;
  11.         hash = ((hash << 5) + hash) + *arKey++;
  12.         hash = ((hash << 5) + hash) + *arKey++;
  13.         hash = ((hash << 5) + hash) + *arKey++;
  14.         hash = ((hash << 5) + hash) + *arKey++;
  15.     }
  16.     switch (nKeyLength) {
  17.         case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  18.         case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  19.         case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  20.         case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  21.         case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  22.         case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
  23.         case 1: hash = ((hash << 5) + hash) + *arKey++; break;
  24.         case 0: break;
  25. EMPTY_SWITCH_DEFAULT_CASE()
  26.     }
  27.     return hash;
  28. }

2 个答案:

答案 0 :(得分:4)

所有哈希表都使用该哈希算法;例如,PHP中的哈希表用于实现数组和符号表,以及许多其他事项。

header中指出的算法是DJBX33A(Daniel J. Bernstein,Times 33 with Addition)。

答案 1 :(得分:1)

您可以使用此链接查看此功能的使用位置: http://lxr.php.net/search?q=+zend_inline_hash_func&defs=&refs=&path=&hist=&project=PHP_5_4

看起来有3个php扩展(包括标准)使用此功能。