<?php
/*
+------------------------------------------------------------------------------
| datetime 2013-10-29 12:46:44
+------------------------------------------------------------------------------
| author baijm
+------------------------------------------------------------------------------
*/
/**
* hash节点的数据结构,用类模拟一个数据链表
*/
class HashNode {
public $key;
public $value;
public $nextNode;
public function __construct($key, $value, $nextNode = NULL) {
$this->key = $key;
$this->value = $value;
$this->nextNode = $nextNode;
}
}
class HashTable {
private $buckets; //用于存储数据的数组
private $size = 10; //数组的大小
public function __construct() {
//$this->buckets=new SplFixedArray($this->size);
$this->buckets = array();
}
/**
* 计算key的hash值,使用最简单的hash算法
* @param type $key
* @return type
*/
private function hashFunc($key) {
for ($i = 0, $len = strlen($key); $i < $len; $i++) {
$hashVal+=ord($key{$i});
}
return $hashVal % $this->size;
}
public function insert($key, $value) {
$index = $this->hashFunc($key);
if (isset($this->buckets[$index])) {
$nextNode = new HashNode($key, $value, $this->buckets[$index]);
} else {
$nextNode = new HashNode($key, $value);
}
$this->buckets[$index] = $nextNode;
}
public function find($key) {
$index = $this->hashFunc($key);
$current = $this->buckets[$index];
while(isset($current)){
if($current->key==$key){
break;
}else{
$current=$current->nextNode;
}
}
print_r($this->buckets);
return $current->value;
}
}
$hash = new HashTable();
$hash->insert('key1', 'value1');
$hash->insert('key12', 'value12');
$hash->find('key1');
$hash->find('key12');
?>