专栏首页代码审计PHP基础之查找

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 执行后的效果如下图:

小结

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java基础之二分法查找

    指尖改变世界
  • Go基础之--排序和查找操作

    排序操作主要都在sort包中,导入就可以使用了 import("sort") 常用的操作 sort.Ints:对整数进行排序 sort.Strings:对字符串...

    coders
  • 数据结构基础温故-6.查找(上):基本查找与树表查找

    只要你打开电脑,就会涉及到查找技术。如炒股软件中查股票信息、硬盘文件中找照片、在光盘中搜DVD,甚至玩游戏时在内存中查找攻击力、魅力值等数据修改用来作弊等,都要...

    Edison Zhou
  • Linux 基础:文件查找 find

    在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。 find的语法比较简单,常用参数的就那么几个,比如 -name、 -type...

    程序员宝库
  • Linux 基础:文件查找 find

    在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。 find的语法比较简单,常用参数的就那么几个,比如 -name、 -type...

    程序员宝库
  • 基础练习 查找整数

    刘开心_1266679
  • php基础之Trait

    Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 m...

    爱知汇
  • 数据结构基础(2) --顺序查找 ; 二分查找

    顺序查找 适用范围: 没有进行排序的数据序列 缺点: 速度非常慢, 效率为O(N) //实现 template <typename Type> Ty...

    Java帮帮
  • PHP二分查找

    这是属于查找类型的题目,因为数组是一个升序排列的整数叔组所以很容易想到使用二分查找这种思想来实现 O(log n) 级别的效率获取答案结果。代码如下

    大眼瞪小眼

扫码关注云+社区

领取腾讯云代金券