以前的文章介绍了PHP的运算符、流程控制、函数、排序等。有兴趣能够去看看。
PHP入门之类型与运算符
PHP入门之流程控制
PHP入门之函数
PHP入门之数组
PHP基础之排序
下面简单介绍一下查找,经常使用的查找有顺序查找、二分查找。php
思想:
对某个数组,按照顺序,一个一个比较,而后找到你想要的数据。
代码案例:html
<?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); ?>
输出结果为:
找到了,下标为=2web
注意:
想使用二分查找有一个重要的前提,那就是数组必须是有序的,若是无序,须要先排序,再查找。
思想:
先找到这个数组的中间那个数,若是大于中间这个数,那就向后查找,若是小于中间这个数,那就向前查找。若是相等,那说明找到了。
代码案例:数组
<?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里面写核心代码。用户输入代码以下:post
<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>
接下来思考,如何找到打出最低分和最高分的裁判。当咱们假设数组的第一个就是最低或者最高的,而后遍历数组,依次与第一个进行比较,符合判断就交换元素和下标。这样是否是就能够找到了呢,我们用代码说明。ui
<?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
执行后的效果以下图:
code
上面就是关于查找的一下内容,但愿对你们有所帮助。orm