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 缓冲的免费实现方法
Oct 09 PHP
杏林同学录(二)
Oct 09 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
Oct 30 PHP
php查询ip所在地的方法
Dec 05 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php实现插入排序
Mar 29 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP使用非对称加密算法RSA
Apr 21 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
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
js 文件引入实现代码
2010/04/23 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python中几种自动微分库解析
2019/08/29 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
华为python面试题
2016/05/03 面试题
2014年服务员工作总结
2014/11/18 职场文书
初中班主任教育随笔
2015/08/15 职场文书
《日月潭》教学反思
2016/02/20 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android