PHP查找一列有序数组是否包含某值的方法


Posted in PHP onFebruary 07, 2020

问题:对于一列有序数组,如何判断给出的一个值,该值是否存在于数组。

思路:判断是否存在,最简单是,直接循环该数组,对每一个值进行比较。但是对于有序数组来说,这样写就完全没有利用好“有序”这一特点。

所有我们使用到“二分法查找”,

//有序数组为

$arr = array(2,5,66,87,954,1452,5865);

//查找值

$str = 1452;

//我们先定义 三个参数

$front = 0;//一个开始值下标

$end = count($arr) - 1;//一个结束值下标

$mid = intval(($front + $end) / 2);//中间值下标

1、第一次比较,我们直接判断查找值str是否等于中间值mid,如果等于 直接返回 true;

2、如果查找值str大于中间值mid,则说明查找值str可能在中间值的右边,即对开始值front需重新赋值 = 中间值mid + 1,结束值end不用变,依次中间值mid为新的开始值 + 结束值;

3、如果查找值str小于中间值mid,则说明查找值str可能在中间值的左边,即开始值不用变,结束值end需重新赋值 = 中间值 - 1,依次中间值mid为开始值 + 新的结束值;

-----如上,对于传入的开始值,结束值,中间值,进行比较。一旦开始值 大于 结束值 则说明没有找到,结束查询,反之等于就返回已找到。

具体代码如下:

$str = 89;//查找值

$arr = [1,55,66,89,420];//有序数组

$ren = find($arr, $str);

echo '<pre>';

var_dump($ren);

function find($arr, $str){

 $front = 0;//开始下标

 $end = count($arr) - 1;//结束下标

 while($front <= $end){//结束值 大于 开始值 ,反之则退出

  $mid = intval(($front + $end) / 2);//中间值下标

  if($str == $arr[$mid]){

   return $mid;//存在直接返回值的下标

  }

  if($str > $arr[$mid]){

   $front = $mid + 1;//在前面

  }

  if($str < $arr[$mid]){

   $end = $mid - 1;//在后面

  }

 }

 return false;

}

返回结果:89为第四个元素值下标3

int(3)

以上就是PHP查找一列有序数组是否包含某值(二分查找)的详细内容,如果有任何补充可以联系三水点靠木小编。

PHP 相关文章推荐
php.ini中文版
Oct 09 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
php测试kafka项目示例
Feb 06 #PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 #PHP
PHP实现常用排序算法的方法
Feb 05 #PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 #PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 #PHP
php post换行的方法
Feb 03 #PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 #PHP
You might like
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php四种基础算法代码实例
2013/10/29 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
php array_map()函数实例用法
2021/03/03 PHP
js计算页面刷新的次数
2009/07/20 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
Python中用max()方法求最大值的介绍
2015/05/15 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
护士自荐信怎么写
2013/10/18 职场文书
餐厅总厨求职信
2014/03/04 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
Spring整合Mybatis的全过程
2021/06/28 Java/Android
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
python垃圾回收机制原理分析
2022/04/13 Python