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 相关文章推荐
从网上搜到的phpwind 0day的代码
Dec 07 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
php类中private属性继承问题分析
Nov 01 PHP
php面象对象数据库操作类实例
Dec 02 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
php检测文本的编码
Jul 26 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
PDO::beginTransaction讲解
Jan 27 PHP
php实现文章评论系统
Feb 18 PHP
PHP中md5()函数的用法讲解
Mar 30 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 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中如何调用webservice的实例参考
2013/04/25 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
基于JQuery的日期联动实现代码
2011/02/24 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
使用Python处理BAM的方法
2018/09/28 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
Python实现疫情地图可视化
2021/02/05 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
创业计划实施的7大步骤
2014/02/05 职场文书
北京奥运会主题口号
2014/06/13 职场文书
闪闪的红星观后感
2015/06/08 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers