A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Yt雨天 初级黑马   /  2017-4-19 15:22  /  984 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用 for 和next 遍历数组
对php数组往往 不能单纯使用for 循环进行遍历
//需求 使用for 循环和next (函数 遍历一下数组(输出其下标和对应值)
<?php
$arr4 = array(1=>3,'a'=>11,3=>5,"mn=>18",88=>2);
$len = count($arr4);
for ($i = 1; $i<$len;++$i){
  $key = key($arr4);
  $calue=current($arr4);
  echo "<br />$key = > $calue"'
next($arr4);
}
?>
结果:
1=>3
a1=>11
3=>5
mn=>18
88=>2
echo(函数的使用)
echo()函数的作用:先去的一个数组的“当前单元”的下表和值(并放入一个数组),然后将指针移到下一个单元。
使用形式
$a = echo ($数组名)
<?php
$arr4 = array(
  1=>3,
  'a'=>11,
  3=>5,
);
$result12 = echo($arr4);
echo"<br / >result1为:<pre>";print_r($result1);
$result12 = echo($arr4);
echo"<br / >result2为:<pre>";print_r($result2);
?>

list()函数的使用
list()函数用于一次性取得一个数组中从0开始的数字下标多个单元的值!
形式:
list($变脸1,$变量2,$变量3……) = $数组;
作用
  上述代码相当于:
$变量1 =$数组{0};
$变量2 =$数组{1};
$变量3 =$数组{2};
这个变量的数组,要跟数组的数字下标对应 如果某个变量对应的数字下标不存在就睡报错
<?php
//这是一个数组 其中有整数数字下标
$c=ayyy(0=>0,1=>11,3=>33,2=>22);
list($1)=$c;
list($a1,$s2) = $c;
list($m1,$m2,$m3) = $c
echo"<br />v1=$v1";
echo"<br / >s1=$s1,s2=$s2";
echo"<be />m1=$m1,m2=$m2,m3=$m3"
?>
数组变量的一些细节
foreach也是正常的循环语法结构 可以有break和continue等操作。
遍历过程中值变量默认的传递方式值传递
遍历过程中值变量可以认为设定为引用传递foreach($arr as $key =>&$value){……}
foreach默认是还原数组上进行遍历 但如果在遍历过程中对数组进行了某种修改或每种指针操作 则会复制数组后再复制数组上继续遍历循环。
foreach中如果值变量是引用传递,则无论如何都是在原数组上进行
数组排序
$arr1 = array(1=>3,'a1'=>11,3=>5,"mn"=>18,88=>12);
echo "<br />排序前:";print_r($arr1);
sort($arr1);
echo "<br />排序前";print_r($arr1);
结果:
排序前Arry([1]=>3[a1] =11 [3] = >5 [mn] =>18[88]=>2)
排序前Arry([0]=>2[1] =3 [2] = >5 [3] =>11[4]=>18)

冒泡排序算法
演示数组为:
$a=array(9,3,5,8,2,7);
演算过程描述:
从数组的左边开始 依次两两比较相邻的2个数据的大小 如果发现左边的比右边的大 则蒋他们的进行交换 这样进行“一趟”之后 必然可以确定最大的一个数据放在最右边
  按此防止 对“剩余的数据”继续进行下一趟则有会确定这些剩余数据耳朵最大值放在剩余位置的最右边
原是数组   9  3  5  8  2  7  
第 1躺后   3  5  5  2  7  9
第2 躺后   2  3  2  7  8  9
第 3躺后   3  2  5  7  8  9
第4 躺后   2  3  5  7  8  9
第5 躺后   2  3  5  7  8  9
规则描述:
1 假设数组的数据有n个。
2 要进行比较的“趟数”为n-1;
3 每一堂要比的数据个数都比前一趟少一个,第一趟要比n个(即比较 n-1次)
4每一次比较 如果发现“左边的数据”大于“右边的数据” 就对这两者进行位置交换位置
代码演示:
<?php
$a=array(9,3,5,8,2,7);
echo"<br/>排序之前:"print_r($a);
$n = count($a);
for($i = 0;$i < $n - 1; ++$i){
   for ($k = 0 ; $k < $n-$i-1;++$k){
      //这里把$k当作下标,
       if($a[$k] > $a[$k+1]){
$t = $a[$k];
$a[$k] =$a[$k+1];
$a[$k+1] = $t;
     }
  }
}
echo"<br /> 排序之后:";print_r($a);
?>
选择排序:
演示数组为:
$a=array(9,3,5,8,2,7);
演算过程描述:
  将一个数组的最大值的下标,并将这个最大值的单元跟最后一个单元进行交换;
  然后继续从剩余数据中取得最大值的下标,并将这个最大值下标的单元跟剩余的最后一个单元交换
  一次类推 直到只剩下一个数据 就不用找了
原是数组   9  3  5  8  2  7  
第 1躺后   7  3  5  8  2  9
第2 躺后   2  3  5  7  8  9
第 3躺后   2  2  5  7  8  9
第4 躺后   2  3  5  7  8  9
第5 躺后   2  3  5  7  8  9
  规则描述:
1 假设数组的数据有n个。
2 要进行查找最大值单元并进行交换“趟数”为n-1;
3 每一趟都要求出“剩余数据”中的最大值单元 并且 剩余数据的数量 每一趟都少一个 第一趟有n个。
4 每一趟找出最大值单元后 都要进行交换:最大值单元 跟剩余数据中的最后一个单元交换。
<?php
$a=array(9,3,5,8,2,7);
echo"<br/>排序之前:"print_r($a);
$n = count($a);
for($i = 0;$i < $n - 1; ++$i){
   $max = $a[0];
   $pos = 0;
   for ($k = 0 ; $k < $n-$i-1;++$k){
      //这里把$k当作下标,
       if($a[$k] > $a[$k+1]){
$t = $a[$k];
$a[$k] =$a[$k+1];
$a[$k+1] = $t;
     }
  }
$t = $a[$pos];
$a[$pos] = $a[$n-$i -1];
$a[$n-$i-1]=$t;
}
echo"<br /> 排序之后:";print_r($a);
?>

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马