PHP常见的数组遍历方式
在PHP开发中,数组是我们最用的PHP函数之一,并且对于数组函数的遍历方式也有很多种,如果我们熟悉PHP数组的遍历方式以及每种方式的优缺点,会让我们的程序优雅需求,不管是开发效率还是代码的执行效率上都会得到大大的提升。直线导轨滑台
1、foreach
这是我们最常见的遍历之一
$arr=['a','b','c']; foreach($arras$key=>$val){ $newArr[]=$val; } print_r($newArr);//Array([0]=>a[1]=>b[2]=>c)
2、for
这应该是超级通用的语法了
$arr=['a','b','c']; for($i=0;$i<count($arr);++$i){ $arr[$i]=$arr[$i]; } print_r($arr);//Array([0]=>a[1]=>b[2]=>c)
不推荐使用。
它的效率比不上foreach。而且写法上比foreach略繁琐。
3、array_map
使用匿名函数的方式,处理数组里的每个元素。遍历完成后返回一个新的数组
$arr=['a','b','c']; $arr=array_map(function($item){ return$item.'_i'; },$arr); print_r($arr);//['a_i','b_i','c_i'];
你可以同时处理多个数组
$arr_1=['a','b','c']; $arr_2=['你','好','吗','原','罪'];//$arr_n=[...]; $arr=array_map(function($item_1,$item_2){ return$item_1.'_'.$item_2.'_i'; },$arr_1,$arr_2); print_r($arr);//['a_你_i','b_好_i','c_吗_i','_原_i','_罪_i']
是的,遍历的次数以最长的数组为准。
遍历3次之后,$arr_1 其实是完成了的,所以之后 $item_1 的值都是null
4、array_walk
以引用传递的形式遍历你的数组,没有返回值,而且只能处理一个数组。
$arr=['a','b','c']; array_walk($arr,function(&$item){ $item=$item.'_i'; });print_r($arr);//['a_i','b_i','c_i'];
注意到 &$item 了吗,是的,多了个&,代表着你的形参是以引用传递接收数据的。你要做的就是想办法改变这个参数。
假如你处理的是二维数组,处理方式也是万变不离其宗的。
$arr=[['name'=>'a'],['name'=>'b'],['name'=>'c']]; array_walk($arr,function(&$item){ $item['name']=$item['name'].'_i'; }); print_r($arr);//[['name'=>'a_i'],['name'=>'b_i'],['name'=>'c_i']];
5、reset
准确的讲并不止reset一个函数,需要组合多个内置函数,平常写代码基本是用不上的
$arr=['a','b','c'];//reset()指针切换到头部,其实默认就是指向开头,可以忽略这句reset($arr);//current()获取当前指针的元素值while($value=current($arr)){ //key()获取当前指针的元素下标 $arr[key($arr)]=$value.'_i'; //next()指针移到下一个next($arr); }print_r($arr); //['a_i','b_i','c_i'];
6、each
这个函数在PHP7.2已经被废弃了@deprecated,而且感觉特别古老的书写方式。这种写法的执行效率也不行,新手应该直接放弃。
$arr=['a','b','c']; while(list($key,$value)=each($arr)){ $arr[$key]=$value.'_i'; } print_r($arr); //['a_i','b_i','c_i'];
一、使用for语句循环遍历数组;
二、使用foreach语句遍历数组;
三、联合使用list()、each()和while循环遍历数组。
这三种方法中效率最高的是使用foreach语句遍历数组。从PHP4开始就引入了foreach结构,是PHP中专门为遍历数组而设计的语句,推荐大家使用。先分别介绍这几种方法。