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]." "; 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]." "; 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 ' '; 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 ?>
念念不忘,必有回响。