二维数组由行和列组成。由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. rabbitmq之partitions

    集群为了保证数据一致性,在同步数据的同时也会通过节点之间的心跳通信来保证对方存活.那如果集群节点通信异常会发生什么,系统如何保障正常提供服务,使用何种策略回复呢? rabbitmq提供的处理脑裂的方法 ...

  2. 通过php获取用户微信openid

    // 基于CI框架 // 访问开始页面 public function url() { // wxAction/oauth2 微信回调地址:微信传入code值,通过该code在wxAction/oau ...

  3. Array与ArrayBuffer

    一.概述 二:Array使用 1.建立方式三种(数组里可以有不同的数据类型) 2.Array的简单使用 三:ArrayBuffer的简单使用 1.ArrayBuffer建立 导包 2.添加元素(+=) ...

  4. StringBuffer与StringBuilder有什么区别

    package String比较; /* * StringBuffer与StringBuilder有什么区别 * StringBuilder是JDK5增加的一个新类,功能几乎与StringBuffer ...

  5. 【MySQL】MySQL压缩包安装遇到问题

    电脑多加了一个内存条,就装了64位的系统,然后重装了一大波软件,然而到了MySQL,我作死,因为之前是用msi装的,据说还有一种压缩文件的装法,于是我就下了个安装包,按照网上的教程开始配置,完了之后遇 ...

  6. VMware安装的相关文章

    1.在虚拟机中安装CentOS7(百度文库) 2.VM虚拟机下安装Centos7.0图文教程(centos中文站) 2016年8月10日11:30:03

  7. Did not find handler method for springMVC资源文件扫描不到---关于spring的那些坑

    今天将项目的spring版本升级到4.2.5版本后,登录首页发现资源文件全部访问不到,页面彻底挂掉: 查找原因,后来又查找spring的更新文档后,才确认下来原来是mvc-dispatcher-ser ...

  8. JS阻止链接跳转代码

    刷新后focus在第一个标签 onload="$('#input_email').focus(); " $(document).ready(function(){ $(" ...

  9. SQLite的使用--SQLite语句

    一.SQLite的介绍   1.为什么要存储数据?        1.1 手机数据大多都是从网络加载的,不存储,每次滚动界面都要从新发送网络请求加载数据,浪费流量      1.2 当用户没网的时候, ...

  10. LaTeX学习教程

    本来我对LaTeX不是看好的,毕竟都是命令格式的.觉得有word就足够啦word可视化操作方便快捷. 但是由于要写论文等,在导师要求下潜心学习一下,不知不觉间被LaTeX的强大功能所吸引.现在很多出版 ...