黑马程序员技术交流社区
标题: 2032-李志颖-4-17-视频课 [打印本页]
作者: 温存另一半的爱 时间: 2017-4-18 23:38
标题: 2032-李志颖-4-17-视频课
使用for和next遍历数组注意:对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也是正常的循环语法结构,可以有break和continue等操作。
遍历过程中值变量默认的传值方式是值传递。
//演示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
演算过程描述:
从数组的左边开始,开始两两比较响铃的两个数据的大小,把大的数据放在右边,这样进行一趟后,必然可以确定最大的一个数据放在右边
按此方式,对剩余的数据进行下一趟,则会确定这些剩余数据的最大值放在剩余位置的最右边
演示:
规律描述:
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
演算过程描述:
求得一个数组的最大值下标,并将这个最大值下标的单元跟最后一个单元进行交换;
然后,继续从生育数据中取得最大值下标,并经这个最大值下标的单元跟生育的最后一个单元格交换
演示:
规律描述:
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 |