<?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'); ?>