Heim >Backend-Entwicklung >PHP-Tutorial >huaidanshizenyanglianchengde PHP中用hash实现的数组

huaidanshizenyanglianchengde PHP中用hash实现的数组

WBOY
WBOYOriginal
2016-07-29 08:46:101162Durchsuche

PHP中使用最多的非Array莫属了,那Array是如何实现的?在PHP内部Array通过一个hashtable来实现,其中使用链接法解决hash冲突的问题,这样最坏情况下,查找Array元素的复杂度为O(N),最好则为1.
而其计算字符串hash值的方法如下,将源码摘出来以供查备:

复制代码 代码如下:


static inline ulong zend_inline_hash_func(const char *arKey, uint nKeyLength)
{
register ulong hash = 5381;                                                   //此处初始值的设置有什么玄机么?
/* variant with the hash unrolled eight times */
for (; nKeyLength >= 8; nKeyLength -= 8) {                         //这种step=8的方式是为何?
hash = ((hash hash = ((hash hash = ((hash hash = ((hash hash = ((hash hash = ((hash hash = ((hash hash = ((hash }
switch (nKeyLength) {
case 7: hash = ((hash case 6: hash = ((hash case 5: hash = ((hash case 4: hash = ((hash case 3: hash = ((hash case 2: hash = ((hash case 1: hash = ((hash case 0: break;
EMPTY_SWITCH_DEFAULT_CASE()
}
return hash;//返回hash值
}


ps:对于以下函数,仍有两点不明:
hash = 5381设置的理由?
这种step=8的循环方式是为了效率么?

以上就介绍了huaidanshizenyanglianchengde PHP中用hash实现的数组,包括了huaidanshizenyanglianchengde方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn