hashtable php,哈希表在php中的使用

在对哈希表的基本内容有所了解后,有些人就键之类的概念还不清楚,导致对于概念的理解上一知半解。这里我们需要深入哈希表内部的一些结构进行学习。同时明确其在使用时的优势和相关的应用场景。下面我们就这三个方面进行全面的讲解,然后带来相关的哈希表在php中的使用。

1.内部组成

键(key):用于操作数据的标示,例如PHP数组中的索引,或者字符串键等等。

槽(slot/bucket):哈希表中用于保存数据的一个单元,也就是数据真正存放的容器。

哈希函数(hash function):将key映射(map)到数据应该存放的slot所在位置的函数。

2.优势

通过关键值计算直接获取目标位置,对于海量数据中的精确查找有非常惊人的速度提升,理论上即使有无限的数据量,一个实现良好的哈希表依旧可以保持O(1)的查找速度,而O(n)的普通列表此时已经无法正常执行查找操作(实际上不可能,受到JVM可用内存限制,机器内存限制等)。

3.应用场景

在工程上,经常用于通过名称指定配置信息、通过关键字传递参数、建立对象与对象的映射关系等。目前最流行的NoSql数据库之一Redis,整体的使用了哈希表思想。

一言以蔽之,所有使用了键值对的地方,都运用到了哈希表思想。

4.使用实例nstruct($size='')

{

$bucketsSize = is_int($size)?$size:$this->size;

$this->collection = new SplFixedArray($bucketsSize);

}

//生成散列值,作为存储数据的位置

private function _hashAlgorithm($key)

{

$length = strlen($key);

$hashValue = 0;

for($i=0; $id($key[$i]);

}

return ($hashValue%($this->size));

}

//在相应的位置存储对应的值

public function set($key, $val)

{

$index = $this->_hashAlgorithm($key);

$this->collection[$index] = $val;

}

//根据键生成散列值,进而找到对应的值

public function get($key)

{

$index = $this->_hashAlgorithm($key);

return $this->collection[$index];

}

//删除某个值,成功返回1,失败返回0

public function del($key)

{

$index = $this->_hashAlgorithm($key);

if(isset($this->collection[$index])) {

unset($this->collection[$index]);

return 1;

} else {

return 0;

}

}

//判断某个值是否存在,存在返回1, 不存在返回0

public function exist($key)

{

$index = $this->_hashAlgorithm($key);

if($this->collection[$index]){

return 1;

} else {

return 0;

}

}

//返回key的个数

public function size()

{

$size = 0;

$length = count($this->collection);

for($i=0; $icollection[$i]) {

$size++;

}

}

return $size;

}

//返回value的序列

public function val()

{

$size = 0;

$length = count($this->collection);

for($i=0; $icollection[$i]) {

echo $this->collection[$i]."

";

}

}

}

//排序输出

public function sort($type=1)

{

$length = count($this->collection);

$temp = array();

for($i=0; $icollection[$i]) {

$temp[] = $this->collection[$i];

}

}

switch ($type) {

case 1:

//正常比较

sort($temp, SORT_REGULAR);

break;

case 2:

//按照数字比较

sort($temp, SORT_NUMERIC);

break;

//按照字符串进行比较

case 3:

sort($temp, SORT_STRING);

break;

//根据本地字符编码环境进行比较

case 4:

sort($temp, SORT_LOCALE_STRING);

break;

}

echo "";

print_r($temp);

}

//逆序输出

public function rev($type=1)

{

$length = count($this->collection);

$temp = array();

for($i=0; $icollection[$i]) {

$temp[] = $this->collection[$i];

}

}

switch ($type) {

case 1:

//正常比较

rsort($temp, SORT_REGULAR);

break;

case 2:

//按照数字比较

rsort($temp, SORT_NUMERIC);

break;

//按照字符串进行比较

case 3:

rsort($temp, SORT_STRING);

break;

//根据本地字符编码环境进行比较

case 4:

rsort($temp, SORT_LOCALE_STRING);

break;

}

echo "";

print_r($temp);

}

}

//简单的测试

$list = new hashTable(200);

$list->set("zero", "zero compare");

$list->set("one", "first test");

$list->set("two", "second test");

$list->set("three", "three test");

$list->set("four", "fouth test");

echo $list->val();

echo "after sorted :

";

$list->rev(3);

以上就是哈希表在php中的使用,大家可以看到在实例代码部分还是很复杂的,所以大家一定要对哈希表的基本组成和概念理解透彻后,才能进行下一步的使用。更多php学习指路:php数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值