php 实现hash表

时间:2023-03-09 07:15:55
php 实现hash表

hash表又称散列表,通过把关键字key经过hash函数映射到hash表中某个位置获取记录。

存放记录的数组又称为hash表,映射函数称为hash函数

下面是php中实现hash表的方法

<?php
/*hash表又称散列表,通过把关键字key经过hash函数映射到hash表中某个位置获取记录。
*
* 存放记录的数组就是hash表
*
*/
class hashtable{
private $buckets;//存储数据的数组
private $size = 10;//数组长度 public function __construct(){//hash表数组初始化
$this->buckets = new SplFixedArray($this->size);
}
/*=====hash函数=====*/
private function hashfun($key){
$strlen = strlen($key);
$hashval = 0;
for($i=0;$i<$strlen;$i++){
$hashval+=ord($key[$i]);
} return $hashval%$this->size;
} /*=====hash插入操作=====*/
public function insert($key,$val){
$index = $this->hashfun($key);
if(isset($this->buckets[$index])){
$newnode = new hashnode($key, $val,$this->buckets[$index]);//新增值在头部
}else{
$newnode = new hashnode($key, $val);
}
$this->buckets[$index] = $newnode;
} /*=====hash表取值操作=====*/
public function find($key){
$index = $this->hashfun($key);
$current = $this->buckets[$index]; while(isset($current)){
if($current->key == $key){
return $current->value;
}
$current = $current->nextnode;
}
return NULL;
}
} //拉链法解决冲突
class hashnode{
public $key;
public $value;
public $nextnode; public function __construct($key,$value,$nextnode=NULL){
$this->key = $key;
$this->value = $value;
$this->nextnode = $nextnode;
}
} $m = new hashtable();
$m->insert('key1', 'value1');
$m->insert('key12', 'value2');
echo $m->find('key1');
echo $m->find('key12'); ?>