PHP基础之查找
前言
之前的文章介绍了PHP的运算符、流程控制、函数、排序等。有兴趣可以去看看。
PHP入门之类型与运算符
PHP入门之流程控制
PHP入门之函数
PHP入门之数组
PHP基础之排序
下面简单介绍一下查找,常用的查找有顺序查找、二分查找。
顺序查找
思想:
对某个数组,按照顺序,一个一个比较,然后找到你想要的数据。
代码案例:
<?php
#顺序查找
$myarr=array(4,3,9,1,6,23.5);
function search (&$myarr,$searchval){
#添加一个标志
$flag=false;
#遍历数组
for ($i=0;$i<count($myarr);$i++){
#进行查找
if ($myarr[$i]==$searchval){
echo "找到了,下标为=$i";
$flag=true;
}
}
if (!$flag){
echo '查询不到!';
}
}
#search($myarr,989); #会输出查询不到!
search($myarr,9);
?>
输出结果为:
找到了,下标为=2
二分查找
注意:
想使用二分查找有一个重要的前提,那就是数组必须是有序的,如果无序,需要先排序,再查找。
思想:
先找到这个数组的中间那个数,如果大于中间这个数,那就向后查找,如果小于中间这个数,那就向前查找。如果相等,那说明找到了。
代码案例:
<?php
#二分查找
$myarr=array(1,4,6,15,18,57);
function binarySearch (&$myarr,$findval,$leftindex,$rightindex){
#这个限制条件必须有,不然玩不转。return必须有,不然会一直循环。
if ($leftindex>$rightindex){
echo '没找到';
return;
}
#找到中间那个数
$middleindex=round(($leftindex+$rightindex)/2); #round是四舍五入取整
#如果大于中间的,向后找。
if ($findval>$myarr[$middleindex]){
binarySearch($myarr,$findval,$middleindex+1,$rightindex);
#如果小于中间的向前找
}elseif ($findval<$myarr[$middleindex]){
binarySearch($myarr,$findval,$leftindex,$middleindex-1);
}else{
echo "找到了,下标=$middleindex";
}
}
binarySearch($myarr,4,0,6);
echo '<br/>';
print_r($myarr);
?>
输出结果:
找到了,下标=1
Array ( [0] => 1 [1] => 4 [2] => 6 [3] => 15 [4] => 18 [5] => 57 )
案例
咱们了解了数组,排序,查找,做一个小练习吧。
要求:
现在有六个裁判对比赛进行打分,要求由用户输入裁判分数,并打印出来,去掉一个最高分和一个最低分,求出比赛的平均成绩。并找到打出最低分和最高分的裁判打印出来。
现在我们先做用户的输入界面,用一个表单就可以了。由于是本地,我就提交到了aipan02.php中。aipan02.php里面写核心代码。用户输入代码如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<h1>输入裁判打分的数据,空格隔开</h1>
<body>
<form action="caipan02.php" method="post">
请输入:<input type="text" name="sum">
<input type="submit" value="提交">
</form>
</body>
</html>
接下来思考,如何找到打出最低分和最高分的裁判。当我们假设数组的第一个就是最低或者最高的,然后遍历数组,依次与第一个进行比较,符合判断就交换元素和下标。这样是不是就可以找到了呢,咱们用代码说明。
<?php
$sums=$_POST['sum'];
$arr=explode(" ",$sums);
function dafen01 ($arr){
$minsum=$arr[0];
$minindex=0;
for ($i=0;$i<count($arr);$i++){
#找出打最低分的裁判
if ($minsum>$arr[$i]){
$minsum=$arr[$i];
$minindex=$i;
}
}
return $minindex;
}
function dafen02 ($arr){
$maxsum=$arr[0];
$maxindex=0;
for ($i=0;$i<count($arr);$i++){
#找到打最高分的裁判
if ($maxsum<$arr[$i]){
$maxsum=$arr[$i];
$maxindex=$i;
}
}
return $maxindex;
}
$minindex=dafen01($arr);
$maxindex=dafen02($arr);
echo "下标为".$minindex."打的分数最低为".$arr[$minindex];
echo '<br/>';
echo "下标为".$maxindex."打的分数最高为".$arr[$maxindex];
echo '<br/>';
echo "**********************".'<br/>';
#遍历数组并求平均值
$sums=0;
for ($i=0;$i<count($arr);$i++){
echo "下标为"."$i"."的裁判打的分为".$arr[$i];
echo '<br/>';
if ($i!=$minindex && $i!=$maxindex){
$sums+=$arr[$i];
}
}
echo '<br/>';
echo "除去最高分和最低分的平均值为".$sums/(count($arr)-2);
?>
下面我们用用户输入:88 90 60 78 100 93
执行后的效果如下图:

小结
上面就是关于查找的一下内容,希望对大家有所帮助。
PHP基础之查找的更多相关文章
- lqb 基础练习 查找整数 (遍历)
基础练习 查找整数 时间限制:1.0s 内存限制:256.0MB 问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含 ...
- Java实现 蓝桥杯 基础练习 查找整数
基础练习 查找整数 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n ...
- 基础算法-查找:线性索引查找(I)
前面介绍的几种查找的算法都是基于数据有序的基础上进行的.但是在实际的应用中,很多数据集可能有惊人的数据量,面对这些海量的数据,要保证记录全部按照当中的某个关键字有序,其时间代价是非常昂贵的,所以这种数 ...
- JavaScript Dom基础-9-Dom查找方法; 设置DOM元素的样式; innerHTML属性的应用; className属性的应用; DOM元素上添加删除获取属性;
JavaScript Dom基础 学习目标 1.掌握基本的Dom查找方法 domcument.getElementById() Domcument.getElementBy TagName() 2.掌 ...
- 算法与数据结构基础 - 合并查找(Union Find)
Union Find算法基础 Union Find算法用于处理集合的合并和查询问题,其定义了两个用于并查集的操作: Find: 确定元素属于哪一个子集,或判断两个元素是否属于同一子集 Union: 将 ...
- 算法与数据结构基础 - 折半查找(Binary Search)
Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...
- 30天C#基础巩固----查找XML文件元素
一:XML文档 了解xml文档. 利用代码来创建XML文档. //引用命名空间+using System.Xml; XmlDocument xdoc=new XmlDocument(); XmlDec ...
- WINDOWS黑客基础(4):查找进程运行的基址
从WINDOWS VISITA开始以后,windows已经开始支持随机基址的关系,也就是说以前我们的进程基址都是从0x40000开始的,如果一个变量在我们第一次运行的时候地址为0x50000,那么以后 ...
- java基础 二分查找算法
/* * 折半查找法: * 思路: * 定义三个变量记录查找范围中最大.最小和中间的索引值,每次都是使用中间索引值与要查找的目标进行对比,如果不符合,那么就不停缩小查找范围 * */ ...
随机推荐
- 07-Python面对对象初级
一.简介 面对过程编程: 根据操作数据的函数或语句块来设计程序. 面对对象编程:把一些函数,数据,方法和功能结合起来,用“对象”包裹组织程序的一种方法. 类和对象是面向对象编程的两个主要方面.类创建一 ...
- 当我谈 HTTP 时,我谈些什么?
当我们打开网站时也许不会去留意网站前面的HTTP是怎么来的.但是它毫无疑问在网络中有着举足轻重的地位.本文从起源到发展,详说HTTP从1到3的演变. 说在前面 本文不致力于讲完 HTTP 的全部内容, ...
- 关于Mint-UI中loadmore组件的兼容性问题
源代码 遇到的问题 写完了之后数据加载,渲染等等都是没有问题的,但是测试总是提上滑刷新不能用,因为是远程开发,测试提就得改,看代码看文档,看半天看不出来问题,想到了兼容性问题,发现也有人遇到这个坑.安 ...
- 2019CSP-J T4 加工零件
题目描述 凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇.工厂里有 n 位工人,工人们从 1 ∼n 编号.某些工人之间存在双向的零件传送带.保证每两名工人之间最多只存在一 ...
- 深入浅出Semaphore源码解析
Semaphore通过permits的值来限制线程访问临界资源的总数,属于有限制次数的共享锁,不支持重入. 前提条件 在理解Semaphore时需要具备一些基本的知识: 理解AQS的实现原理 之前有写 ...
- Linux常用命令归类总结
文件相关 创建文件 touch: touch README.md ">"重定向: echo 'study and share' > README.md vi & ...
- spring +ActiveMQ 实战 topic selecter指定接收
spring +ActiveMQ 实战 topic selecter指定接收 queue:点对点模式,一个消息只能由一个消费者接受 topic:一对多,发布/订阅模式,需要消费者都在线(可能会导致信息 ...
- DJANGO-天天生鲜项目从0到1-001-环境框架搭建
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- vue学习(九) 使用内联样式设置style样式
/html <div id="app"> //对象就是无序键值对的集合 <h1 :style="{ color:red, 'font-weight':2 ...
- presto和hive日期函数对比
时间格式转换 日期格式→Unix时间戳 转10位Unix时间戳 数据:2020-07-23 15:01:13 Presto:select to_unixtime(cast('2020-07-23 15 ...