二维数组由行和列组成。由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. Python简明语法

  2. 【iCore3 双核心板】例程九:ADC实验——电源监控

    实验指导书及代码包下载: http://pan.baidu.com/s/1o7wSEO6 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  3. EditText中输入手机号码时,自动添加空格

    输入手机号码时,自动添加空格,更容易辨别 public class PhoneWatcher implements TextWatcher { private EditText _text; publ ...

  4. P1941 飞扬的小鸟

    此题很容易写出方程,由以前的知识可以迁移得,本题可以用完全背包的方法进行优化,使用滚动数组即可得到答案. //莫名奇妙60分.不知道什么细节出了错. #include <bits/stdc++. ...

  5. 蓝牙物理链路类型:SCO和ACL链路

    蓝牙物理链路ACL(Asynchronous Connectionless), 另外的一种链路是SCO(Synchronous Connection Oriented)主要用来传输对时间要求很高的数据 ...

  6. ES6 module export options 模块导出、导入语法

    http://stackoverflow.com/questions/25494365/es6-module-export-options A year and some later, here is ...

  7. FP - growth 发现频繁项集

    FP - growth是一种比Apriori更高效的发现频繁项集的方法.FP是frequent pattern的简称,即常在一块儿出现的元素项的集合的模型.通过将数据集存储在一个特定的FP树上,然后发 ...

  8. lsof 命令 系统管理 系统监控

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件. 在终端下输入ls ...

  9. 如何用按钮的click事件去触发a标签的click事件

    在jQquery中,可以用如下方式触发input.a标签的click事件: <input id="my_input" /> <a id="my_a&qu ...

  10. freemarker学习

    链接: http://swiftlet.net/archives/category/freemarker