PHP基礎之查找

前言

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

相關文章
相關標籤/搜索