二维数组由行和列组成。由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. JS写的CRC16校验算法

    var CRC = {}; CRC.CRC16 = function (data) { var len = data.length; if (len > 0) { var crc = 0xFFF ...

  2. angular+ckeditor最后上传的最后一张图片不会被添加(bug)

    做法一: angularJs+ckeditor 一.页面 <textarea ckeditor required name="topicContent" ng-model=& ...

  3. ExtJS笔记 Store

    The Store class encapsulates a client side cache of Model objects. Stores load data via a Proxy, and ...

  4. 基于swoole的网页一对一实时聊天

    需求分析 网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒. 核心技术 html5的websocket,php的swoole扩展http://wiki.swoole.com/ 数据表 ...

  5. 【C++】const

    1. 默认状态下,const对象仅在文件内有效,即在不同文件中出现同名const变量的时候,其实相当于这些同名const是不同的东西. 如果想要在文件中共享const变量,可以在const变量不管是声 ...

  6. APP在iOS和Android的推送规则

    因为iOS和Android不同的规则,下边将iOS和Android能接收到通知的详细情 形进行说明(前提:APP已经在设备上安装并登录过):  iOS:                    APP未 ...

  7. 命令行子shell 括号 ()

    子shell 控制变量 ansible-direc:~ # (export hello=world;echo $hello)worldansible-direc:~ # echo $hello ans ...

  8. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  9. S3C2440 裸机程序之音频

     mini2440之Main分析 2012-03-17 20:51:29 分类: 嵌入式 /****************************************************** ...

  10. 对java多线程的认识

    多线程的概念:多线程是一种机制,它允许在程序中并发的执行多个线程,且每个线程间相互独立. 实现多线程的两种方式: 1.继承java.lang.Thread类,并且重写它的run方法,将线程的执行主体放 ...