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 ?>

__EOF__

本文作者Paxster
本文链接https://www.cnblogs.com/paxster/p/3550049.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Paxster  阅读(1777)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示