• PHP-----二维数组和二分查找


    二维数组由行和列组成。由arr[$i][$j]表示,先后表示行和列,类似于坐标点。

    打印二维数组-----通过两次遍历,第一次遍历每一行,第二次遍历每一行的具体元素,并且通过使用count($arr[$i])---代表每一行有几个元素,使代码适应性更好,可以打印不规则的二维数组。

    转置矩阵-----颠倒行和列的值,然后再次遍历即可。

     1 <?php
     2     //1.打印一个二维数组
     3     $arr=array(
     4         array(1,2,3,4,5,6),
     5         array(2,2,3,1,2,5),
     6         array(0,9,8,7,5,0,9),
     7         array(3,5,6,7,8,3,5)
     8         );
     9     /*for($i=0;$i<count($arr);$i++){
    10         for($j=0;$j<count($arr[$i]);$j++){
    11             echo $arr[$i][$j]."&nbsp;";
    12         }
    13         echo "<br/>";
    14     }*/
    15     //转置上面的矩阵
    16     for($i=0;$i<count($arr);$i++){
    17         for($j=0;$j<count($arr[$i]);$j++){
    18             $arr2[$j][$i]=$arr[$i][$j];
    19         }
    20     }
    21     //遍历数组2
    22     for($i=0;$i<count($arr);$i++){
    23         for($j=0;$j<count($arr[$i]);$j++){
    24             echo $arr[$i][$j]."&nbsp;";
    25         }
    26         echo "<br/>";
    27     }
    28 
    29 ?>

    顺序查找:直接通过遍历一次数组实现。

     1 $arr=array(1,2,4,6,7,8);
     2     function search(&$arr,$find){
     3         $flag=false;
     4         for($i=0;$i<count($arr);$i++){
     5             if($find==$arr[$i]){
     6                 echo 'find'.$i;
     7                 $flag=true;
     8                 break;
     9             }
    10         }
    11         if(!$flag){
    12             echo 'Not find!';
    13         }
    14         $flag=false;
    15     }
    16     search($arr,4);

    二分查找-----和快速排序的原理有点类似。首先排除特例,如果左边的下标大于右边直接退出(这表示数组不是有序数组);计算数组的中间下标值,并用round函数取整;如果需要查找的数大于数组的中间值,那么就把中间值的下标+1,如果需要查找的数小于数组的中间值,那么就把中间值的下标-1;如果需要查找的数等于数组的中间值,直接输出。二分查找运用了递归。

     1 //二分查找(必须是有序数组才能使用二分查找)
     2     function binaryFind(&$arr,$find,$leftIndex,$rightIndex){
     3         if($leftIndex>$rightIndex){
     4             echo 'not find';
     5             return;
     6         }
     7         $middleIndex=round(($leftIndex+$rightIndex)/2);//四舍五入
     8 
     9         if($find>$arr[$middleIndex]){
    10             binaryFind($arr,$find,$middleIndex+1,$rightIndex);//右边增加了一个数
    11         }elseif($find<$arr[$middleIndex]){
    12             binaryFind($arr,$find,$leftIndex,$middleIndex-1);//左边增加了一个数
    13         }else{
    14             echo "$middleIndex";
    15         }
    16     }
    17     $arr=array(1,2,4,6,7,8);
    18     binaryFind($arr,0,0,count($arr)-1);//下标需要减一,去除查询数他本身

    打印乘法表

    1 //打印乘法表
    2     for($i=1;$i<=9;$i++){
    3         for($j=1;$j<=$i;$j++){
    4             echo "$j*$i=".$i*$j;
    5             echo '&nbsp;';
    6         }
    7         echo "<br/>";
    8     }

    评委打分小实例-----运用了假设的思想,一步一步的假设,然后判断可行性。

     1 //计算打分
     2     function findMin(&$arr){
     3         $minScore=$arr[0];
     4         $minIndex=0;
     5         for($i=1;$i<count($arr);$i++){
     6             if($minScore>$arr[$i]){
     7                 $minScore=$arr[$i];
     8                 $minIndex=$i;
     9             }
    10         }
    11         return $minIndex;
    12     }
    13     function findMax(&$arr){
    14         $maxScore=$arr[0];
    15         $maxIndex=0;
    16         for($i=1;$i<count($arr);$i++){//$i=1;
    17             if($maxScore<$arr[$i]){
    18                 $maxScore=$arr[$i];
    19                 $maxIndex=$i;
    20             }
    21         return $maxIndex;    
    22         }
    23     }
    24     $arr=array(20,90,40,80,88,89,50);
    25     $minIndex=findMin($arr);
    26     $maxIndex=findMax($arr);
    27 
    28     $sum=0;
    29     for($i=0;$i<count($arr);$i++){
    30         if($i!=$minIndex && $i!=$maxIndex){
    31             $sum+=$arr[$i];
    32         }
    33     }
    34 
    35     echo "key is".$minIndex."last score is".$arr[$minIndex]."<br/>";
    36     echo "key is".$maxIndex."top score is".$arr[$maxIndex]."<br/>";
    37     echo "平均成绩是".$sum/(count($arr)-2);
    38     $avarage=$sum/(count($arr)-2);
    39     //找出最佳评委
    40     $different=abs($arr[0]-$avarage);//差值取绝对值,假设第一位就是最佳评委
    41     $goodIndex=0;
    42     for($i=0;$i<count($arr);$i++){
    43         if($different>abs($arr[$i]-$avarage)){
    44             $different=abs($arr[$i]-$avarage);
    45             $goodIndex=$i;
    46         }
    47     }
    48     echo "最佳评委是".$i;

    成绩查询小实例

    html页面----关于input元素的type类型

    button 定义可点击按钮(多数情况下,用于通过 JavaScript 启动脚本)。
    checkbox 定义复选框。
    file 定义输入字段和 "浏览"按钮,供文件上传。
    hidden 定义隐藏的输入字段。
    image 定义图像形式的提交按钮。
    password 定义密码字段。该字段中的字符被掩码。
    radio 定义单选按钮。
    reset 定义重置按钮。重置按钮会清除表单中的所有数据。
    submit 定义提交按钮。提交按钮会把表单数据发送到服务器。
    text 定义单行的输入字段,用户可在其中输入文本。默认宽度为 20 个字符。
     1 <html>
     2 <head>
     3     <title></title>
     4 </head>
     5 <body>
     6 <form action="arr2222.php" method="post">
     7     <input type="text" placeholder="请输入要搜索的学号" name="stuNum">
     8     <input type="hidden" name="doing" value="seaNum">
     9     <input type="submit" value="提交">
    10 </form>
    11 <form action="arr2222.php" method="post">
    12     <input type="text" placeholder="请输入要搜索的成绩" name="stuGra">
    13     <input type="hidden" name="doing" value="seaGra">
    14     <input type="submit" value="提交">
    15 </form>
    16 <form action="arr2222.php" method="post">
    17     <input type="hidden" name="doing" value="seaStep">
    18     <input type="submit" value="查询成绩范围">
    19 </form>
    20 </body>
    21 </html>

    php页面-----通过判断name==value来选择执行那一块的代码;运用$flag变量来控制if判断流程;最后一个elseif创建了一个虚拟的数组来存放学生成绩。

     1 <?php
     2     $arr=array(20,56,59,80,90,100,88,81,79,66,59);
     3     $doing=$_REQUEST['doing'];
     4     //$seaStep=$_REQUEST['seaStep'];
     5 
     6     function showGrade($stuNum,&$arr){
     7         return $arr[$stuNum];
     8     }
     9     function showNum($stuGra,&$arr){
    10         $flag=false;
    11         for($i=0;$i<count($arr);$i++){
    12             if($stuGra==$arr[$i]){
    13                 echo '学号为'.$i.'成绩为'.$stuGra;
    14                 $flag=true;
    15             }
    16         }
    17         if($flag==false){
    18             echo "没有此成绩";
    19         }
    20     }
    21 
    22     if($doing=='seaNum'){
    23         $stuNum=$_REQUEST['stuNum'];//接受的是序号
    24         echo "该学生的成绩是".showGrade($stuNum,$arr);
    25     }elseif($doing=='seaGra'){
    26         $stuGra=$_REQUEST['stuGra'];
    27         showNum($stuGra,$arr);
    28     }elseif($doing=='seaStep'){
    29         
    30         $arr2=array(0,0,0,0,0);
    31 
    32         for($i=0;$i<count($arr);$i++){
    33             if($arr[$i]>=0 && $arr[$i]<=59){
    34                 $arr2[0]+=1;
    35             }elseif($arr[$i]>=60 && $arr[$i]<=69){
    36                 $arr2[1]+=1;
    37             }elseif($arr[$i]>=70 && $arr[$i]<=79) {
    38                 $arr2[2]+=1;
    39             }elseif($arr[$i]>=80 && $arr[$i]<=89) {
    40                 $arr2[3]+=1;
    41             }elseif($arr[$i]>=90 && $arr[$i]<=100) {
    42                 $arr2[4]+=1;
    43             }
    44         }
    45         echo "1----".$arr2[0].'<br/>'."2----".$arr2[1].'<br/>'."3----".$arr2[2].'<br/>'."4----".$arr2[3].'<br/>'."5----".$arr2[4];
    46     }
    47 ?>
    念念不忘,必有回响。
  • 相关阅读:
    数独游戏
    数据类型格式化函数(PostgreSQL),ORACLE支持
    DB2中有关日期和时间的函数,及应用
    XPath详解,总结(转)
    使用 DB2 Connect By 的分级查询(转)
    了解 DB2 Version 9.5 中的全局变量(转)
    DB2中游标的使用(转)
    如何启用和禁用oracle&DB2数据库外键约束(转)
    如何在 DB2 Universal Database 中暂时禁用触发器(转)
    DB2的一些常用SQL写法(转)
  • 原文地址:https://www.cnblogs.com/paxster/p/3550049.html
Copyright © 2020-2023  润新知