首頁 後端開發 php教程 PHP中Array的hash函数兑现

PHP中Array的hash函数兑现

Jun 13, 2016 pm 01:08 PM
case hash lt

PHP中Array的hash函数实现

今天回顾学习了PHP中变量实现的方法,在浏览其源码是发现在PHP中所有的数据类型通过一个union存储。

php语言是弱类型语言,其实现中通过记录变量的类型和值来实现其管理。

?

PHP中使用最多的非Array莫属了,那Array是如何实现的?

在PHP内部Array通过一个hashtable来实现,其中使用链接法解决hash冲突的问题,这样最坏情况下,查找Array元素的复杂度为O(N),最好则为1.

?

而其计算字符串hash值的方法如下,将源码摘出来以供查备:

ps:对于以下函数,仍有两点不明:

1.? hash = 5381设置的理由?

2.? 这种step=8的循环方式是为了效率么?

?

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 
?
 <div class="clear">
                 
              
              
        
            </div>
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php如何實現Redis的Hash操作 php如何實現Redis的Hash操作 May 30, 2023 am 08:58 AM

Hash操作//為hash表中的欄位賦值。成功返回1,失敗返回0。若hash表不存在會先建立表格再賦值,若欄位已存在會覆寫舊值。 $ret=$redis->hSet('user','realname','jetwu');//取得hash表中指定欄位的值。若hash表不存在則回傳false。 $ret=$redis->hGet('user','rea

HMD Skyline 獲得新的顏色選項和官方磁性外殼 HMD Skyline 獲得新的顏色選項和官方磁性外殼 Aug 23, 2024 am 07:04 AM

上個月推出 HMD Skyline(亞馬遜售價 499 美元)時,它有兩種顏色:霓虹粉和扭曲黑。現在,第三種顏色加入了藍色托帕石的行列。 HMD Global 也宣布了 PH 的官方案例

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Laravel開發:如何使用Laravel Hash產生密碼雜湊? Laravel開發:如何使用Laravel Hash產生密碼雜湊? Jun 17, 2023 am 10:59 AM

Laravel是目前最受歡迎的PHPweb框架之一,為開發人員提供了許多強大的功能和元件,其中LaravelHash也是其中之一。 LaravelHash是用於密碼雜湊的PHP函式庫,可用於保護密碼的安全,並使應用程式的使用者資料更加安全。在本文中,我們將了解LaravelHash的工作原理以及如何使用它來對密碼進行雜湊和驗證。前置知識在學習Lara

switch case判斷變數 switch case判斷變數 Feb 19, 2024 am 08:04 AM

switchcase判斷變量,需要具體程式碼範例在程式設計中,我們經常需要根據不同的變數值來執行不同的操作。 switchcase語句是一種方便的結構,可以根據變數的值來選擇不同的程式碼區塊來執行。以下是一個具體的程式碼範例,展示如何使用switchcase語句判斷變數的不同取值:#includeintmain(){

请教怎么修改url某一参数的参数值呢?是要拆开了再拼回去吗 请教怎么修改url某一参数的参数值呢?是要拆开了再拼回去吗 Jun 13, 2016 am 10:24 AM

请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?那么请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?http://127.0.0.1/myo/newuser.php?mod=search&type=fastone比如现在我要修改mod=new要怎么做呢?------解决方案--------------------发送了请求

一文搞懂Hash演算法以及應用場景 一文搞懂Hash演算法以及應用場景 Apr 13, 2023 am 11:55 AM

一、什麼是雜湊演算法雜湊和雜湊都來自單字hash,前者是音譯,後者是意譯。是一種可以將任意長度的二進位值映射為固定長度二進位值的演算法,映射後固定長度的二進位值稱為雜湊值。一個優秀的雜湊演算法需要滿足以下幾點要求:不能從雜湊值反向推導出原始資料;對輸入資料非常敏感,一個bit不同就會導致雜湊值非常不一樣;雜湊衝突的機率要很小;哈希演算法的計算過程要夠簡單高效,即使原始資料很長,也能很快得到哈希值;二、雜湊演算法的使用場景2.1 安全加密比較常見的雜湊加密演算法有MD5( MD5 Message-Dige

Redis基本資料類型雜湊Hash常用操作實例分析 Redis基本資料類型雜湊Hash常用操作實例分析 May 31, 2023 am 10:43 AM

Redis資料型別Hash常用操作redis裡的hash是一個string類型的field(欄位)和value(值)的對應表。特別適合用於儲存對象,每個hash可以儲存40多億鍵值對。熟悉python的童鞋可以想像成字典dict。之前的資料型別儲存都是k-v這樣,而hash的儲存就是k-dict,dict裡又會有屬於自己的k-v。一、hset為雜湊表中的欄位賦值,如果雜湊表不存在,建立一個新的雜湊表被並進行hset操作。如果欄位已經存在於雜湊表中,則舊值將被覆寫。 hsetmyhashk1v1二、h

See all articles