查看内容

php实现映射操作实例详解

更新时间:2019年10月02日 12:13:30   作者:walkingSun

这篇文章主要介绍了php实现映射操作,结合实例形式详细分析了PHP映射概念、原理及使用链表与二叉树实现映射的相关操作技巧,需要的朋友可以参考下

本文实例讲述了php实现映射操作。分享给大家供大家参考,具体如下:

映射,或者射影,在数学及相关的领域经常等同于函数。基于此,部分映射就相当于部分函数,而完全映射相当于完全函数。

映射(Map)是用于存取键值对的数据结构(key,value),一个键只能对应一个值且键不能重复。

key = $key; $this->value = $value; $this->next = $next; } public function set($key,$value){ $node = $this; while( $node && $node->next ){ if( $node->next->key==$key ){ $node->next->value = $value; return $node->next; } $node = $node->next; } $node->next = new self($key,$value,$node->next); $this->size++; return $node->next; } public function get($key){ $node = $this; while($node){ if( $node->key ==$key ){ return $node->value; } $node = $node->next; } throw new \Exception('cannot found key'); } public function isExist($key) { $node = $this; while($node){ if( $node->key ==$key ){ return true; } $node = $node->next; } return false; } public function delete($key) { if( $this->size==0) throw new \Exception('key is not exist'); $node = $this; while($node->next){ if( $node->next->key == $key ){ $node->next = $node->next->next; $this->size--; break; } $node = $node->next; } return $this; } public function getSize() { return $this->size; } }

set('sun',111); //O(n) $dict->set('sun',222); $dict->set('w',111); $dict->set('k',111); var_dump($dict->get('w')); //O(n) var_dump($dict->isExist('v')); //O(n) var_dump($dict->delete('sun')); //O(n) var_dump($dict->getSize()); /******************************************/ //111 //false //true //2

key = $key; $this->value = $value; $this->left = null; $this->right = null; $this->size = 0; } public function set( $key , $value ){ if( $this->size ==0 ){ $node = new static( $key,$value ); $this->key = $node->key; $this->value = $node->value; $this->size++; }else{ $node = $this; while($node){ if( $node->key == $key ){ $node->value = $value; break; } if($node->key>$key){ if($node->left==null){ $node->left = new static( $key,$value ); $this->size++; break; } $node = $node->left; }else{ if($node->right==null){ $node->right = new static( $key,$value ); $this->size++; break; } $node = $node->right; } } } return $this; } public function get( $key ){ if( $this->size ==0 ) throw new \Exception('empty'); $node = $this; while($node) { if ($node->key == $key) { return $node->value; } if ($node->key > $key) { $node = $node->left; } else { $node = $node->right; } } throw new \Exception('this key not exist'); } public function isExist( $key ){ if( $this->size ==0 ) return false; $node = $this; while($node) { if ($node->key == $key) { return true; } if ($node->key > $key) { $node = $node->left; } else { $node = $node->right; } } return false; } public function delete($key){ //找到元素,寻找元素左边最小元素 $node = $this->select($key); if( $node->right!=null ){ $node1 = $node->selectMin($node->right); //替换当前node $node->key = $node1->key; $node->value = $node1->value; //删除$node->right最小元素,获取最终元素赋给$node->right $nodeMin = $this->deleteMin($node->right); $node->right = $nodeMin; }else{ $node1 = $node->selectMax($node->left); $node->key = $node1->key; $node->value = $node1->value; $nodeMax = $this->deleteMax($node->left); $node->left = $nodeMax; } return $this; } protected function deleteMin( $node ){ // if( $this->size ==0 ) // throw new \Exception('empty'); // $prev = new static(); // $prev->left = $node; // while($prev->left->left!=null){ // // $prev = $prev->left; // } // $prev->left = $prev->left->right; if( $node->left==null ){ $rightNode = $node->right; $node->right = null; $this->size--; return $rightNode; } $node->left = $this->deleteMin($node->left); return $node; } protected function deleteMax($node){ if( $node->right==null ){ $leftNode = $node->left; $node->left = null; $this->size--; return $leftNode; } $node->right = $this->deleteMax($node->right); return $node; } public function getSize(){ return $this->size; } public function select($key){ $node = $this; while($node){ if($node->key==$key){ return $node; } if ($node->key > $key) { $node = $node->left; } else { $node = $node->right; } } throw new \Exception('this key not exist'); } public function selectMin( $node ){ while($node->left){ $node = $node->left; } return $node; } public function selectMax( $node ){ while($node->right){ $node = $node->right; } return $node; } }

网站保存快捷方式以后在浏览起来就比较方便了,实现的方法有很多,下面为大家详细介绍下使用PHP实现网站快捷方式的保存,有此需求的朋友可以参考下,希望对大家有所帮助

这篇文章主要介绍了PHP数据的提交与过滤基本操作,简要说明了php数据过滤的基本方法并结合实例形式分析了php针对各种常见类型数据的过滤操作使用技巧,需要的朋友可以参考下

这篇文章主要介绍了PHP数据分析引擎计算余弦相似度算法,结合具体实例形式分析了php计算余弦相似度的操作步骤与相关实现技巧,需要的朋友可以参考下

本篇文章主要是对php中调用其他系统http接口的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助

这篇文章主要介绍了PHP基于redis计数器类定义与用法,结合实例形式较为详细的分析了php定义的redis计数器类及其相关使用技巧,需要的朋友可以参考下

这篇文章主要介绍了php禁止浏览器使用缓存页面的方法,以实例形式较为详细的讲述了PHP禁用缓存的方法及用途,需要的朋友可以参考下

防止表单重复提交有很多种方法,其不外乎,客户端脚本防止刷新,服务端token验证等等,thinkphp内置了表单token验证,可以方便的防止表单重复提交

这篇文章主要介绍了php可扩展的验证类,实例分析了php针对邮件、手机号、URL等常用的验证技巧,非常具有实用价值,需要的朋友可以参考下

这篇文章主要介绍了php简单统计中文个数的方法,涉及strlen、mb_strlen及mb_strwidth等函数的使用方法与相关注意事项,需要的朋友可以参考下