AI智能
改变未来

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);?>

输出结果:找到了,下标=1Array ( [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执行后的效果如下图:#小结上面就是关于查找的一下内容,希望对大家有所帮助。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » PHP基础之查找