u 数组的排序php
这里咱们介绍一些经常使用的排序方法, 排序是一个程序员基本功, 所谓排序就是对一组数据,按照某个顺序排列的过程。html
排序分两大类:程序员
l 内部排序编程
(1) 交换式排序法数组
① 冒泡法函数
基本思想:post
案例说明:ui
<?php //简单的 $arr=array(0,5,-1); //这是一个中间变量 $temp=0; //咱们要把数组,从小到大 //外层循环 for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ //说明前面的数比后面的数大,就要交换 if($arr[$j]>$arr[$j+1]){ $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } //输出 print_r($arr); ?>
为了更好使用排序,咱们将其封装成一个函数:代码以下 :spa
<?phpcode
//简单的
//如今咱们把冒泡法封装成函数,利用之后使用
function bubbleSort(&$myarr){
//这是一个中间变量
$temp=0;
//咱们要把数组,从小到大
//外层循环
for($i=0;$i<count($myarr)-1;$i++){
for($j=0;$j<count($myarr)-1-$i;$j++){
//说明前面的数比后面的数大,就要交换
if($myarr[$j]>$myarr[$j+1]){
$temp=$myarr[$j];
$myarr[$j]=$myarr[$j+1];
$myarr[$j+1]=$temp;
}
}
}
echo "<br/>函数中的myarr数组";
print_r($myarr);
}
$arr=array(0,5,-1);
//使用函数去排序
bubbleSort($arr);
//输出
print_r($arr);
?>
☞ 从上面的案例咱们能够看出
* 数组默认传递的是值,不是地址
② 快速排序法
快速排序法,咱们就介绍了一个思想:
③ 选择排序法
选择排序法的案例:
举例说明:
function selectSort(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
//假设 $i就是最小的数
$minVal=$arr[$i];
//记录我认为的最小数的下标
$minIndex=$i;
for($j=$i+1;$j<count($arr);$j++){
//说明咱们认为的最小值,不是最小
if($minVal>$arr[$j]){
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最后交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
本身分析流程.
④ 插入排序法
排序思想:
//插入排序法(小->大)
function insertSort(&$arr){
//先默认下标为0 这个数已是有序
for($i=1;$i<count($arr);$i++){
//$insertVal是准备插入的数
$insertVal=$arr[$i];
//准备先和$insertIndex比较
$insertIndex=$i-1;
//若是这个条件知足,说明,咱们尚未找到适当的位置
while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
//同时把数后移
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
//插入(这时就给$insertVal找到适当位置)
$arr[$insertIndex+1]=$insertVal;
}
}
从效率上看.
冒泡法< 选择排序法 < 插入排序法
快速排序法.[空间和时间]
l 外边排序
由于数据量大,必须借助外边文件来完成.
u 查找
咱们这里给你们介绍 两种
① 顺序查找
对某个数组,安装顺序,一个一个比较,而后找到你要的数据.
案例:
要求从一个数组 $arr=array(46,90,900,0,-1)中查找一个 数 34,若是查找则输出该数的下标,若是找不到,则输出,查无此数
代码:
//要求从一个数组 $arr=array(46,90,900,0,-1)中查找一个 数 34,若是查找则输出该数//的下标,若是找不到,则输出,查无此数
$arr=array(46,90,900,0,-1,-1);
function search(&$arr,$findVal){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($findVal==$arr[$i]){
echo "找到了,下标为=$i";
$flag=true;
//break;
}
}
if(!$flag){
echo '查询不到';
}
}
search($arr,-1);
② 二分查找法(必须掌握)
所谓二分查找,它有一个重要的前提, 该数组自己已是一个有序数组.
若是该数组不是有序的,则必须先排序再查找
代码伺候:
//二分查找函数
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
//当 $rightIndex>$leftIndex 说明没有数
if($rightIndex<$leftIndex){
echo "找不到该数";
return ;
}
//找到中间这个数
$middleIndex=round(($rightIndex+$leftIndex)/2);
//若是大于则,向后面找
if($findVal>$arr[$middleIndex]){
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
}
//若是是小于中间这个数,则向前面找
else if($findVal<$arr[$middleIndex]){
binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
}else{
echo "找到这个数 下标是 $middleIndex";
}
}
u 多维数组-二维数组
二维数组的基本语法:
$arr=array( array(1,2,3), array(5,6,9) );
$arr[0]=array(1,0);
二维数组,地图 ...
二维数组在内存中存在的形式:
快速入门案例:
请用二维数组,输出以下图形
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
//定义一个二维数组
$arr=array(
array(0,0,0,0,0,0,1),
array(0, 0, 1, 0 ,0 ,0,5),
array(0 ,2 ,0, 3, 0, 0,90),
array(0,0,0,0,0,0,100));
//遍历二维数组(行)
for($i=0;$i<count($arr);$i++){
//遍历每行的数据
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]." ";
}
echo "<br/>";
}
echo "<br/>".$arr[2][3];
1. 打印以下图型:
*********
*********
*********
*********
*********
*********
2. 打印以下图型:
*
**
***
****
*****
3. 打印以下图型:
2. 空心金字塔
3. 空心菱形
定义一个函数
function printTest($n,$name){
}
view.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<form action="homework01.php" method="post">
请输入层数:<input type="text" name="layer"/><br/>
请选择形状:
<select name="shape">
<option value="a">矩形</option>
<option value="b">半金字塔</option>
<option value="c">金字塔</option>
<option value="d">金字塔</option>
<option value="e">金字塔</option>
</select><br/>
<input type="submit" value="打印"/>
</form>
</html>
homework01.php
<?php
//死去活来
//$n表示层数
$n=$_REQUEST['layer'];
//"a"->表示矩形 "b"=>一半金子塔 "c"=>完整的金字塔
$shape=$_REQUEST['shape'];
$starNum=5;
//swtich
function printShape($n,$shape,$starNum=5){
switch($shape){
case "a":
for($i=1;$i<=$n;$i++){
for($j=1;$j<=$starNum;$j++){
echo "*";
}
//打完一层后,换行
echo "<br/>";
}
break;
case "b":
for($i=1;$i<=$n;$i++){
for($j=1;$j<=$i;$j++){
echo "*";
}
echo "<br/>";
}
break;
case "c":
break;
}
}
//调用
printShape($n,$shape);
?>
1. 已知手掌游戏机一台320元,mp3一台260元。
公司举行抽奖大会,公司有18人,一等奖游戏机,二等奖mp3,
购入5台游戏机,13台mp3。
问总价为多少,公司实际平均给每人花费了多少钱。(4980,276.6666)
<?php
$gamerPrice=320;
$mp3Price=260;
$gamerNum=5;
$mp3Num=13;
$totalPrice=$gamerPrice*$gamerNum+ $mp3Price* $mp3Num;
$avgPrice= $totalPrice/ 18;
?>
1. 跳水比赛,8个评委打分。运动员的成绩是8个成绩取掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分。使用一维数组实现打分功能。
解题:
<?php
$arr=array(90,23,89,100,2,5,89,44);
//这里有一个思路,若是只想知道最低分和最高分是多少,则能够排序.
//找出给出最低分的裁判
//该函数能够返回给出最低分的裁判的下标
function findMin($arr){
//假设第一我的就是给出最低分的裁判
$minFen=$arr[0];
$minIndex=0;
for($i=1;$i<count($arr);$i++){
//若是下面条件成立,说明$i 裁判给出的成绩更低
if($minFen>$arr[$i]){
$minFe=$arr[$i];
$minIndex=$i;
}
}
return $minIndex;
}
?>
u php面向对象编程
提出一个问题?
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。若是用户输入的小猫名错误,则显示 张老太没有这只猫猫。
首先咱们用现有的知识来完成这个案例:
<?php
$cat1_name=”小白”;
$cat1_age=3;
$cat1_color=”白色”;
$cat2_name=”小花”;
$cat2_age=100;
$cat2_color=”花色”;
?>
咱们能不能把属于同一事物的 变量,统一管理?
解决之道->对象
快速体验案例:
<?php
class Cat{
public $name;
public $age;
public $color;
}
//建立一只猫
$cat1=new Cat();
$cat1->name="小白";
$cat1->age=3;
$cat1->color="白色";
$cat2=new Cat();
$cat2->name="小花";
$cat2->age=100;
$cat2->color="颜色";
//若是咱们找到一只猫,只要找到 $cat1, 那么该变量全部相关的属性都统统的找到
$findCatName="小花";
if($cat2->name==$findCatName){
echo $cat2->name."||".$cat2->age."||".$cat2->color;
}
?>
咱们这里说明一下类和对象的关系(细节后面逐步展开)
总结几句话:
① 类是抽象的,表明一类事物
② 对象是具体,是类的一个具体实例
③ 类是对象的模板, 对象是类的一个个体实例