php数组的遍历讲解 for foreach list each key

来源:互联网 发布:java中io和nio区别 编辑:程序博客网 时间:2024/04/29 21:18

php数组的遍历讲解

本文主要讲解for,foreach,list,each,key,指针操作相关函数,array_flip ,array_reverse,array_walks等函数的对数组的遍历

1.for循环遍历数组

for循环是几乎所有语言都可以用的一种遍历数组的方式,但是在php语言中for循环不是遍历数组的首选

一下是for循环实现数组遍历的示例代码

<?php/*Designed By Androidyuephp中数组的遍历讲解*///for 循环遍历数组//声明一个数组并且初始化$array=array('Google','Chrome','Android','Youtube','Gmail');//使用for循环遍历各数组元素,count()用来计算数组的长度for($i=0;$i<count($array);$i++){//打印数组的元素的值echo $array[$i],"<br>";}?>



注意:使用for遍历数组存在以下限制:

a  所遍历的数组必须是索引数组(即下标为数字的数组),不能是关联数组(下标为字符串的数组)

如下列代码

<?php$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');for($i=1;$i<=count($arrGoogle);$i++){echo $arrGoogle[$i];}?>


在运行时会报错,类似于这样的错误Notice: Undefined offset: 1 in D:/phpnow/htdocs/holiday/php_array_visit_summary.php on line 13这说明for不适合用于关联数组的遍历

b,for遍历的数组既要满足是索引数组,同时下标又要是连续的整数,如果不是连续的整数则会发生提示

如下列代码

<?php$array=array(1=>'Google',5=>'Chrome',7=>'Android',9=>'Youtube',12=>'Gmail');//print_r($array); for($i=0;$i<count($array);$i++){echo $array[$i],"<br>";}?>


这种情况下也会发生提示类似于Notice: Undefined offset: 2 in D:/phpnow/htdocs/holiday/php_array_visit_summary.php on line 10 因此for循环遍历数组必须是索引数组而且下标必须是连续的。

2.foreach遍历数组

foreach可以说是php语言单独为遍历数组提供的一种方法(其他语言也可能有),这种遍历方法是php遍历数组的首选

foreach遍历时可以是这样的foreach($array as $key=>$value)包含键值元素  也可以是foreach($array as $value)只包含值

foreach($array as $value)示例代码

<?php/*Designed By Androidyuephp中数组的遍历讲解*///foreach实现遍历数组$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');//只包含值foreach($arrGoogle as $value){echo $value.'<br>';}?>


foreach($array as $key=>$value)的代码示例

<?php$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');foreach($arrGoogle as $key=>$value){echo '第',($key+1),'个数组元素的值是',$value,'<br>';}?>


注意以上的$value和$key都是自定义的变量,因此可以根据需要更改成符合自己风格的命名方式

3.使用list函数遍历数组

list()函数是将数组中的值赋给变量  

标准语法:void list ( mixed varname, mixed ... )

用list实现对数组的遍历代码

<?php//使用list遍历函数//$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');//使用关联数组不行$arrGoogle=array('google','Gmail','Chrome','Android');list($brand,$email,$webBrowser,$phone)=$arrGoogle;echo $brand,$email,$webBrowser,$phone;?>


注意:

a  list函数所接受的数组只能是索引数组,不能是关联数组!如果是关联数组,则会出现类似 Notice Undefined offset提示

b  如果只是部分取出数组的值,只需 按照这样的写法即可,list(,,$chrome,)=$arrGoogle;这样我们就可以去除chrome的信息,但是注意一定要保证list参数与数组的元素个数相同(所取值前面的个数)

c list函数赋值按索引顺序赋值

4.each函数遍历数组

each函数返回输入数组的键值对

标准语法:array each(array input array)

返回值:返回4个值0,1,key,value;其中0和key包含键名,而1和value包含相应的数据

使用each遍历数组的示例代码如下:

<?php//使用each函数遍历数组$arrGoogle=array('google','Gmail','Chrome','Android');//第一次使用each取得当前键值对,并且将指针移到下一个位置$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>';//当指针位于数组末尾再次执行函数each,如果是这样再次执行结果返回false$empty=each($arrGoogle);//如果指针无法继续后移返回falseif($empty==false){print '指针以位于数组末尾,无法在向后移,故返回false';}?>


注意:该函数的参数和返回值(在执行该函数前指针不位于数组末尾时)都为数组,在执行函数前数组指针位于数组末尾时再次执行该函数返回值为false

       开始的位置是第一个元素,每(正常)执行一次该函数,指针向后移到下一个地址

5.key()遍历数组

each是用来返回数组的键名

基本语法:mixed key ( array &array )

key函数遍历数组示例代码如下

<?php//Designed By Androidyue//使用key函数遍历数组//初始化一个关联数组$arrChina=array('a'=>'Hebei','b'=>'Anhui','c'=>'Beijing','d'=>'Guangdong','e'=>'Shanghai');//初始化一个索引数组   但是索引数组使用key返回的是空字符产$arrCN=array('Hebei','Anhui','Beijing','Guangdong','Shanghai');//key显示的是数组的字符串下标,如果为索引数组则为空字符串//print_r($arrChina);while($key=key($arrChina)){//对于关联数组使用key方法可以执行echo $key,'<br>';next($arrChina);}print_r($arrCN);//输出一下索引数组while($keyName=key($arrCN)){//这里调用key函数赋值后为false,while条件不成立,不进行{}之间的操作/*if(empty($keyName)){print '该键名为空<br>';}*//*if($keyName=''){print '该键名为空<br>';}*/var_dump($keyName);}//验证对索引数组使用key函数的返回值赋值给变量这个表达式的布尔值if(($KeyName=key($arrCN))==false){print 'False';}//对索引数组调用key函数对变量赋值$keyName=key($arrCN);next($arrCN);//将数组指针向后移动一位next($arrCN);next($arrCN);next($arrCN);next($arrCN);$keyName=key($arrCN);var_dump($keyName);//输出值和类型类型信息//echo $keyName;?>


注意:key函数的参数一般为关联数组,如果为索引数组那么就没有什么意义了

key函数不会推进指针移动,这里我们调用了next函数,next函数用来推进指针向后移动,下面就是next函数的介绍

6.使用对指针进行操作的函数遍历数组

a reset函数  用于将指针设置回数组的初始位置,如果需要在一个脚本中多次查看和处理一个数组,就可以使用这个函数,另外这个函数还常用于排序的结束

b.current() 函数

返回当前当前数组指针位置的值,该函数不对指针进行移动操作,需要注意这个特点

c end 将指针移到数组的最后位置,返回目标位置的值

d next 将指针向后移动一次并返回目标位置的数组值,如果当前位置为数组的最后位置,返回false

e prev 将指针向前移动一次,并返回目标位置的数组值,如果当前位置是数组起始位置,则返回false

<?php//Designed By Androidyue//reset方法的使用  注意以下代码调用了控制指针的函数,移动指针的操作会影响到each函数的结果//初始化一个数组,为了简写代码,声明一个简单的数组$arrGoogle=array('google','Gmail');//调用each函数,并且输出返回数组 换行echo(current($arrGoogle));//使用current函数,打印出当前的值echo (next($arrGoogle));//调用next函数,打印下一个的值$arrG=each($arrGoogle);print_r($arrG);print '<br>';$arrGmail=each($arrGoogle);print_r($arrGmail);print '<br>';$arrMore=each($arrGoogle);//当指针无法继续移动时返回false//print_r($arrMore);//echo $arrMore;print '<br>';//但是如果想继续输出使用重复上面的过程,那么使用reset函数将指针重置为开始位置,然后重复上面的的操作reset($arrGoogle);echo(end($arrGoogle));//调用end函数将指针移到数组最后一个位置,并返回值echo(prev($arrGoogle));//调用prev函数将指针向前移动,并返回值$arrG=each($arrGoogle);print_r($arrG);print '<br>';$arrGmail=each($arrGoogle);print_r($arrGmail);print '<br>';?>


7.array_reverse()

该函数是将目标数组元素逆置,如果设置preserver_key为true,则保持原先的映射,否则重置映射

该函数使用示例代码如下

<?php$arrGoogle=array('Google','Gmail','Android','Chrome','Youtube');echo '<pre>';print '进行操作之前的数组';print_r($arrGoogle);$arrReversed=array_reverse($arrGoogle);//不保留先前映射print '未开启preserve_key 进行逆序操作后的结果';print_r($arrReversed);$arrReversedT=array_reverse($arrGoogle,1);//保留先前映射print '开启preserver_key 进行逆序操作的结果';print_r($arrReversedT);echo'</pre>';?>


8.array_flip()

该函数是将数组的键和值互换

下面是该函数的使用代码

<?php//array_flip()函数的使用//初始化一个索引数组$arrGoogle=array('Google','Chrome');//初始化一个关联数组$arrSohu=array('son'=>'Sogou','child'=>'Chinaren','search'=>'Sogou');//如果存在值相同调用array_flip()函数会按照顺序将相同的值覆盖掉,如'son'=>'Sogou'和'search'=>'Sogou'值相同,使用array_flip()函数后,为[Sogou] => search//对两个数组调用array_flip()函数进行操作并输出,都可以正常输出print_r(array_flip($arrGoogle));print '<br>$arrSogou未进行array_flip()函数操作之前的数组';print_r($arrSohu);print '<br>$arrSogou未进行array_flip()函数操作之后的数组';print_r(array_flip($arrSohu));?>


9.array_walk函数

boolean array_walk(array input_array,callback function[,mixed userdata])

array_walk()函数是将参数数组array_input中的每个元素传递给自定义的函数function 中,进行相关的操作,如果想真正修改array_input的键值对则需要将每个键值对作为引用传递给函数

自定义函数必须接受两个输入参数,第一个是数组的当前值,第二个是数组的当前键,,如果调用array_walk函数给出第三个值userdata,他的第三个值将作为第三个参数传递给自定义函数。

<?php//Designed By Androidyue//array_walk函数的使用//初始化一个数组$arrCorperate=array('移动','联通','电信');/*功能:一个拼接字符串的函数,将数组中的值和用户输入的参数(如果无参数输入拼接默认参数值)参数:$value(自定义),存放数组中的值,$key存放数组中的键,$prefix可选参数,用户需要通过设置array_walk()的第三个参数给它赋值,如果用户无赋值,使用默认,或者根据需要取舍   注意:如果用户使用了引用传值,那么数组的值要改变  */function linkString(&$value,$key,$prefix='cn'){$value=$prefix.$value;//函数体实现字符串拼接}array_walk($arrCorperate,'linkString');//使用array_walk()对该数组按照自定义函数操作//array_walk($arrCorperate,'linkString','中国');//这里传第三个三处对自定义函数设置参数print_r($arrCorperate)?>


原创粉丝点击