zoukankan      html  css  js  c++  java
  • 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
    执行后的效果如下图:

    小结

    上面就是关于查找的一下内容,希望对大家有所帮助。

  • 相关阅读:
    ES的基本用法
    Elasticsearch安装部署
    jquery-layer弹框在火狐浏览器中弹框不显示的问题
    MySQL中横表和竖表相互转换
    echarts--迁徙图特性简介
    Lucene入门案例一
    Lucene入门简介
    SpringMVC中的拦截器
    SpringMVC中Json数据格式转换
    SpringMVC中的文件上传
  • 原文地址:https://www.cnblogs.com/lxfweb/p/13448011.html
Copyright © 2011-2022 走看看