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

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

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

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

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

//有序数组为

$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

关于学习PHP查找一列有序数组是否包含某值的方法的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/40796.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月16日 23:26
下一篇 2022年6月16日 23:26

相关推荐

  • 说说php怎么关闭。

    一、如何关闭PHP服务 要关闭PHP服务,首先需要了解您使用的是哪种Web服务器,以下是针对不同Web服务器关闭PHP服务的教程: 1. 1对于Apache Web服务器 在Linux系统中,可以使用以下命令关闭Apache Web服务器上的PHP…

    2024年6月15日
    03
  • php引用文件的两种方法:require 及 include

    引用文件的方法有两种:require 及 include。 require 的使用方法如: require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PH…

    2018年3月13日
    0170
  • 小编教你服务器搭建php环境。

    一、搭建PHP网站的基本步骤 1. 安装Web服务器:首先需要在Windows系统上安装一个Web服务器,如Apache或Nginx,这里以Apache为例,下载对应的安装包,解压到指定目录,然后配置环境变量。 2. 安装PHP:从官网下载对应…

    2024年6月19日
    03
  • 为什么要使用PHP框架。

    PHP是一种服务器端脚本语言,用于开发动态网站和应用程序。PHP的广泛使用销量超过80%的网络服务器,因此它是Web开发的一个重要组成部分。开发人员可以利用PHP来快速构建功能强大的Web应用程序,但是,如果不使用框…

    2023年6月3日
    02
  • PHP8中的数组函数:array_key_first(),获取数组首个键名的技巧。

    PHP8中新增的数组函数array_key_first(),用于获取给定数组的首个键名。在很多情况下,需要获取一个数组中的首个元素,这时就可以用到这个函数。本文将介绍如何使用array_key_first()函数以及它带来的便利性。一、a…

    2023年5月21日
    05
  • 处理 PHP 开发版本问题

    一、Composer 安装包composer install 之后报错vagrant@homestead:~/Code/sample$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) fr…

    2022年6月25日
    0150
  • PHP微信分享功能开发(附代码)

    有时候当一个项目或工程需要微信端分享之后做一系列事件那么我们就需要获取到微信分享这个动作,也就是说我们已经知道了当前这个东西已经被分享了 ,那么走微信默认的分享显然是不行的我们需要自己动手来配置微信分…

    2018年3月9日
    0245
  • 几种用PHP写99乘法表的方式

    首先按照规矩,还是先废话一番,对于刚学PHP的新手来讲,用php写九九乘法表无疑是非常经典的一道练习题。但不要小看这道练习题,它对于逻辑的考验还是相当到位的。也许有人会觉得,九九乘法表有什么难的,我两分钟…

    2022年6月21日
    0140

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息