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

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

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

 <?php
//1.打印一个二维数组
$arr=array(
array(1,2,3,4,5,6),
array(2,2,3,1,2,5),
array(0,9,8,7,5,0,9),
array(3,5,6,7,8,3,5)
);
/*for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]."&nbsp;";
}
echo "<br/>";
}*/
//转置上面的矩阵
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
$arr2[$j][$i]=$arr[$i][$j];
}
}
//遍历数组2
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]."&nbsp;";
}
echo "<br/>";
} ?>

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

 $arr=array(1,2,4,6,7,8);
function search(&$arr,$find){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($find==$arr[$i]){
echo 'find'.$i;
$flag=true;
break;
}
}
if(!$flag){
echo 'Not find!';
}
$flag=false;
}
search($arr,4);

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

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

打印乘法表

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

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

 //计算打分
function findMin(&$arr){
$minScore=$arr[0];
$minIndex=0;
for($i=1;$i<count($arr);$i++){
if($minScore>$arr[$i]){
$minScore=$arr[$i];
$minIndex=$i;
}
}
return $minIndex;
}
function findMax(&$arr){
$maxScore=$arr[0];
$maxIndex=0;
for($i=1;$i<count($arr);$i++){//$i=1;
if($maxScore<$arr[$i]){
$maxScore=$arr[$i];
$maxIndex=$i;
}
return $maxIndex;
}
}
$arr=array(20,90,40,80,88,89,50);
$minIndex=findMin($arr);
$maxIndex=findMax($arr); $sum=0;
for($i=0;$i<count($arr);$i++){
if($i!=$minIndex && $i!=$maxIndex){
$sum+=$arr[$i];
}
} echo "key is".$minIndex."last score is".$arr[$minIndex]."<br/>";
echo "key is".$maxIndex."top score is".$arr[$maxIndex]."<br/>";
echo "平均成绩是".$sum/(count($arr)-2);
$avarage=$sum/(count($arr)-2);
//找出最佳评委
$different=abs($arr[0]-$avarage);//差值取绝对值,假设第一位就是最佳评委
$goodIndex=0;
for($i=0;$i<count($arr);$i++){
if($different>abs($arr[$i]-$avarage)){
$different=abs($arr[$i]-$avarage);
$goodIndex=$i;
}
}
echo "最佳评委是".$i;

成绩查询小实例

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

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

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

 <?php
$arr=array(20,56,59,80,90,100,88,81,79,66,59);
$doing=$_REQUEST['doing'];
//$seaStep=$_REQUEST['seaStep']; function showGrade($stuNum,&$arr){
return $arr[$stuNum];
}
function showNum($stuGra,&$arr){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($stuGra==$arr[$i]){
echo '学号为'.$i.'成绩为'.$stuGra;
$flag=true;
}
}
if($flag==false){
echo "没有此成绩";
}
} if($doing=='seaNum'){
$stuNum=$_REQUEST['stuNum'];//接受的是序号
echo "该学生的成绩是".showGrade($stuNum,$arr);
}elseif($doing=='seaGra'){
$stuGra=$_REQUEST['stuGra'];
showNum($stuGra,$arr);
}elseif($doing=='seaStep'){ $arr2=array(0,0,0,0,0); for($i=0;$i<count($arr);$i++){
if($arr[$i]>=0 && $arr[$i]<=59){
$arr2[0]+=1;
}elseif($arr[$i]>=60 && $arr[$i]<=69){
$arr2[1]+=1;
}elseif($arr[$i]>=70 && $arr[$i]<=79) {
$arr2[2]+=1;
}elseif($arr[$i]>=80 && $arr[$i]<=89) {
$arr2[3]+=1;
}elseif($arr[$i]>=90 && $arr[$i]<=100) {
$arr2[4]+=1;
}
}
echo "1----".$arr2[0].'<br/>'."2----".$arr2[1].'<br/>'."3----".$arr2[2].'<br/>'."4----".$arr2[3].'<br/>'."5----".$arr2[4];
}
?>

PHP-----二维数组和二分查找的更多相关文章

  1. [算法][LeetCode]Search a 2D Matrix——二维数组的二分查找

    题目要求 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the ...

  2. [19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找

    一.二维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(我们一般使用容器代替,二维数组用的都很少). [代码示例] import ...

  3. 剑指offer65:矩阵中的路径(二维数组,二分查找)

    1 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...

  4. 《剑指Offer》面试题-二维数组中的查找

    题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...

  5. 题目一:使用Java实现二维数组中的查找

    考点:数组       题目:二维数组中的查找   描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判 ...

  6. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  7. 剑指offer:二维数组中的查找

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

  8. 《剑指offer》二维数组中的查找

    一.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.输入描述 ar ...

  9. 剑指Offer面试题:2.二维数组中的查找

    一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  10. 剑指Offer:面试题3——二维数组中的查找(java实现)

    问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...

随机推荐

  1. Mysql5.5命令行修改密码

    今天下载了mysql5.5.45免安装版,配置好之后发现mysql默认是没有设置密码的,也就是密码为空. 如果是本机作开发测试用,有无密码倒也无所谓,不过发布在服务器上没有密码肯定是不行的,那就需要设 ...

  2. SQL优化 1

    SQL_ID:fvdwtfv18yy0m 先看看sql的预估执行计划 select * from table(dbms_xplan.display_awr('fvdwtfv18yy0m')); sql ...

  3. php的字符串处理函数

    Strpos($str,”img”); //返回字符串的位置 Substr($str,int start,int length); 使用这两个函数可以截取字符串

  4. DevExpress GridView中加入CheckBox方法

    添加一列,FieldName为 "check",将ColumnEdit 设置为 复选框 样式.gridview1 editable设置为true 将要绑定的DataTable添加列 ...

  5. Eclipse创建java web工程配置Tomacat和JDK 【转】

    在学习AJAX过程中,还用Intellij就有点老旧了,这是后装个Eclipse时,发现这个配置也很头疼,现在就叫你如何创建一个web工程,同时叫你配置Eclipse. 一.创建一个web工程 1.打 ...

  6. MYSQL中创建存储过程实现向表中循环插入数据

    首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...

  7. 当div自适应的高度超过预设的高度的时候出现滚动条的办法

    方法一:主要是 min-height:50px; max-height:200px;overflow: auto; <div id="ss" style="widt ...

  8. Linux modules install

    安装模块的时候出现错误:modprobe: chdir(3.0.35-g6774ed9-dirty): No such file or directory. 内核模块没有安装正确.本文记录解决方法. ...

  9. 执行robot framework 的测试用例 命令行pybot使用方式

    1.执行整个项目下的所有用例: pybot 项目路径.例如: pybot D:\robot 2.执行某个suit中的所有用例: pybot 项目路径\suit文件名称. 例如:pybot D:\rob ...

  10. Magento 自定义一个搜索功能

    最近工作中有一个需求是需要做一个搜索的功能,但是因为需要定制一些外观,所以就不用传统的方法来继承基类GRID.实现这个需求的核心其实就是下面这个方法. $this->getLayout()-&g ...