php中数组遍历方法有很多种,如有:for,foreach,while(),list(),each()这些函数与方法都要我们在数组遍历中会用到的,下面给大家介绍一下.
1. 使用for语句循环遍历数组
a. 其它语言(只有这一种方式)
b. PHP中这种方式不是我们首选方式
c. 数组必须是索引数组,而且下标还必须是连续的 索引数组下标还可以不连序,数组还有关联数组)
PHP实例代码如下:
- <?php
-
-
-
- $people = Array(
- Array(’name’ => ‘Kalle’, ’salt’ => 856412),
- Array(’name’ => ‘Pierre’, ’salt’ => 215863)
- );
- for($i = 0; $i < sizeof($people); ++$i)
- {
- $people[$i]['salt'] = rand(000000, 999999);
- }
- ?>
以上代码的问题,在于for的第二个表达式会导致代码执行很慢--因为每次循环时都要 计算一遍数组的长度,由于数组的长度始终不变,我们可以用一个中间变量来存储数组长度,然后用这个变量作为for循环的第二个表达式,这样在循环的时候就可以直接使用该变量的值,不用每次重新计算,代码如下:
- <?php
- $people = Array(
- Array(’name’ => ‘Kalle’, ’salt’ => 856412),
- Array(’name’ => ‘Pierre’, ’salt’ => 215863)
- );
- for($i = 0, $size = sizeof($people); $i < $size; ++$i)
- {
- $people[$i]['salt'] = rand(000000, 999999);
- }
- ?>
2.使用foreach语句循环遍历数组
- foreach(数组变量 as 变量值){
- 循环体
- }
a.循环次数由数组的元素个数决定
b.每一次循环都会将数组中的元素分别赋值给后面变量
- foreach(数组变量 as 下标变量=> 值变量){
- }
foreach遍历3维数组:
-
- /*
- $biaoge=array(
- "市场部"=>array(
- array(1,"gaomou1","jingli11",4000),
- array(2,"gaomou2","jingli22",4000),
- array(3,"gaomou3","jingli33",4000)
- ),
- "客服部"=>array(
- array(1,"gao1","li11",4000),
- array(2,"gao2","li22",4000),
- array(3,"gao3","li33",4000)
- ),
- "业务部"=>array(
- array(1,"mou1","jing11",4000),
- array(2,"mou2","jing22",4000),
- array(3,"mou3","jing33",4000)
- )
- );
- foreach($biaoge as $key=>$value){
- echo '<table align="center" width="600" border="1">';
- echo '<caption>联系表</caption>';
- echo '<tr bgcolor="#dddddd">';
- echo '<th>标号</th><th>名字</th><th>职位</th><th>工资</th></tr>';
- foreach($value as $row){
- if($row%2==0){
- $bg="#ffffff";
- }else{
- $bg="#dddddd";
- }
- echo '<tr bgcolor='.$bg.'>';
- foreach($row as $col){
- echo '<td>'.$col.'</td>';
- }
- echo '</tr>';
- }
- echo '</table>';
- }
- echo "<pre>";
- print_r($biaoge);
- echo "</pre>";
3. while() list() each() 组合循环遍历数组
each()函数.
a. 需要一个数组作为参数
b. 返回来的也是一个数组
c. 返回来的数组是0, 1, key, value四个下标(固定的)
0和key下标是当前参数数组元素的?
1和value下标是当前对数数组元素的值
d. 默认认当前元素就是第一个元素
e. 每执行一次后就会将当前元素向后移动
f. 如果到最后的元素再执行这个函数,则返回false
使用each遍历数组的示例代码如下:
- <?php
-
- $arrGoogle=array('google','Gmail','Chrome','Android');
-
- $arrG=each($arrGoogle);
-
- print_r($arrG);
- print '<br>';
- $arrGmail=each($arrGoogle);
- print_r($arrGmail);
- print '<br>';
- $arrChrome=each($arrGoogle);
- print_r($arrChrome);
- print '<br>';
- $arrAndroid=each($arrGoogle);
- print_r($arrAndroid);
- print '<br>';
-
- $empty=each($arrGoogle);
-
- if($empty==false){
- print '指针以位于数组末尾,无法在向后移,故返回false';
- }
- ?>
注意:该函数的参数和返回值(在执行该函数前指针不位于数组末尾时)都为数组,在执行函数前数组指针位于数组末尾时再次执行该函数返回值为false,开始的位置是第一个元素,每(正常)执行一次该函数,指针向后移到下一个地址.
list()函数
a. list()=array(); 需要将一个数组赋值给这个函数
b. 数组中的元素个数,要和list()函数中的参数个数相同
c. 数组中的每个元素值会赋值list()函数中的每个参数,list()将每个参数转为变量
d. list()只能接收索引数组
e. 按索引的下标的顺序
这不是真正的函数,而是PHP的语言结构,list()用一步操作给一组变量进赋值,即把数组中的值赋给一些变量,list()仅能用于数字索引的数组并假定数字索引从0开始,语法格式如下所示:
list(mixed varname,mixed ...)=array_expression //list()语句的语法格式
list()语句和其它函数在使用上有很大的区别,并不是直接接收一个数组作为参数,而是通过“=”去处符以赋值的方式,将数组中每个元素的值,对应的赋给list()函数中的每个参数,list()函数又将它中的每个参数转换为直接可以在脚本中使用的变量,使用方法如下:
- <?php
- $info=array('coffee','brown','caffeine');
-
- list($drink,$color,$power)=$info;
- echo "$drink is $color and $power makes it special.n";
-
- list($drink, ,$power)=$info;
- echo "$drink has $power.n";
-
- list(,,$power)=$info;
- echo "I need $power!n";
- ?>
通过上例了解list()函数的用法之后,将each()函数和list()函数结合起来使用,代码如下:
- <?php
- $contact=array("ID"=>1,"姓名"=>"高某","公司"=>"A公司","地址"=>"北京市");
- list($key,$value)=each($contact);
- echo "$key=>$value";
- ?>
while() 函数
while()循环的语法格式如下:
- while( list($key,$value) = each(array_expressin) ){
- 循环体;
- }
使用这种组合改写前面使用foreach遍历过的一维数组,代码如下所示:
- <?php
-
- $contact=array("ID"=>1,
- "姓名"=>"高某",
- "公司"=>"A公司",
- "地址"=>"北京市",
- "电话"=>"(010)987665432",
- "EMAIL"=>"gao@php.com"
- );
-
- echo '<dl>一个联系人信息:';
- while(list($key,$value) = each($contact) ){
- echo "<dd>$key:$value</dd>";
- }
- echo '</dl>';
- ?>
while() 遍历数据是需要结合list或each函数配置才可以遍历,否则它单独是无法完成数组遍历的.