以前的文章介紹了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