黑马程序员技术交流社区

标题: 2032-李志颖-4-17-视频课 [打印本页]

作者: 温存另一半的爱    时间: 2017-4-18 23:38
标题: 2032-李志颖-4-17-视频课
使用fornext遍历数组
注意:对PHP数组,往往不能单纯使用for循环进行遍历
或者说:PHP中,使用for循环只能循环“下标为连续的纯整数数组”;
//  使用for循环和next()函数,遍历以下数组(输出其下标和对应值)
$arr4 = array(1=>3,  ‘a1’ => 11,  3=>5,  ‘mn’=>18,  88=>2 );
$len = count($arr4);   //取得数组的长度
for$i=0;$I<$len;++$i{
$key =key($arr4);                //取得当前项的键
$value = current($arr4);  //取得当前项的值
echo  <br  />$key=$value;   
next$arr4;         ////对当前项的数据处理完毕,将指针后移一位
}
结果:
1=3
a1=11
3=5
mn=18
88=2
While_each_list()的使用
数组变量里的一些细节
Foreach也是正常的循环语法结构,可以有breakcontinue等操作。
遍历过程中值变量默认的传值方式是值传递。
//演示foreach值变量的值传递含义:
//演示过程中值变量默认的传值方式是值传递。
$arr4 = array(1=>3,  ‘a1’ => 11,  3=>5,  ‘mn’=>18,  88=>2 );
Foreach$arr4  as  $key  => $value{
$value =$value *2;
Echo “<br  />$key  :  $value”;
}
//虽然foreach中,改变了value的值,但是数组本身是没变的:
Echo  <br  />结果为:”;print_r$arr4;
结果为:
1    :  3
a1   :   11
3    :   5
mn  :   18
88   :   2
//演示foreach值变量的引用传递含义:
//演示过程中值变量默认的传值方式是引用传递。
$arr4 = array(1=>3,  ‘a1’ => 11,  3=>5,  ‘mn’=>18,  88=>2 );
Foreach$arr4  as  $key  => &  $value{   //比上面多了一个$符号

$value =$value *2;
Echo “<br  />$key  :  $value”;
}
//虽然foreach中,改变了value的值,但是数组本身改变了:
Echo  <br  />结果为:”;print_r$arr4;
结果为:
1    :  6
a1   :   22
3    :   10
mn  :   36
88   :   4
Foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环(原数组保持不变)。

数组排序算法
//演示sort()排序
$arr1= array(1=>3,  ‘a1’ => 11,  3=>5,  ‘mn’=>18,  88=>2 );
Echo  <br  />排序前:”print_r$arr1;
Sort$arr1;
Echo  <br  />排序后:”print_r$arr1;
结果为:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps4BC2.tmp.jpg
//演示sort()排序
$arr2= array(1=>3,  ‘a1’ => 11,  3=>5,  ‘mn’=>18,  88=>2 );
Echo  <br  />排序前:”print_r$arr2;
asort$arr2;
Echo  <br  />排序后:”print_r$arr2;
结果为:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps4BC3.tmp.jpg
更多排序:

冒泡排序算法
演示数组为:
$a=array(9,  3,  2,  5,  8,  7);  //下标为0,1,2,3,4,5
演算过程描述:
从数组的左边开始,开始两两比较响铃的两个数据的大小,把大的数据放在右边,这样进行一趟后,必然可以确定最大的一个数据放在右边
按此方式,对剩余的数据进行下一趟,则会确定这些剩余数据的最大值放在剩余位置的最右边
演示:
原始数组
9
3
2
5
8
7
第一趟
3
2
5
8
7
9
第二趟
3
2
5
7
8
9
第三趟
3
2
5
7
8
9
第四趟
3
2
5
7
8
9
第五趟
2
3
5
7
8
9
规律描述:
1.假设数组的数据有n个;
2.要进行比较的趟数为n-1
3.每一趟要比较的数据都要比前一趟少一次,第一趟要比较n个数据,即n-1
4.每一次比较,如果发现“左边数据”大于“右边数据”,这两者就要交换位置
$n = count($a); //个数
For($i=0;$i<$n-1;++$i){
For($j=0;$j<$n-$i-1;++$j){
If$a[$k]>$a[$k+1]{
$t=$a[$k];
$a[$k]=$a[$k+1];
$a[$k+1]=$t;
}
}
}
选择排序
演示数组为:
$a=array(9,  3,  2,  5,  8,  7);  //下标为0,1,2,3,4,5
演算过程描述:
求得一个数组的最大值下标,并将这个最大值下标的单元跟最后一个单元进行交换;
然后,继续从生育数据中取得最大值下标,并经这个最大值下标的单元跟生育的最后一个单元格交换
演示:
原始数组
9
3
2
5
8
7
第一趟
7
3
2
5
8
9
第二趟
7
3
2
5
8
9
第三趟
5
3
2
7
8
9
第四趟
2
3
5
7
8
9
第五趟
2
3
5
7
8
9
规律描述:
        1.假设数组的数据有n个;
2.要进行查找最大值单元并进行交换的的趟数为n-1
3.每一趟要求出剩余数据中的最大单元值,并且,剩余数据的数量每一趟都少1个,第一趟有n
4.每一找出最大值后,都要进行交换:最大值单元,跟剩余数据中的最后一个单元格交换
$n = count($a); //个数
for($i=0;$i<$n;++$i){
$max=$a[0];                //找最大值先要取得第一项
$pos=0;   //取得第一项的下标
for($k=0;$k<$n-$i;++$k){
If($a[$k]>$max){
$max=$a[$k];
$pos=$k;
}
$t=$a[$pos];
$a[$pos]=$a[$n-$i-1];
$a[$n-$i-1]=$t;
}
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2