php遍历数组问题
2017-10-14 15:13
246 查看
一、遍历数组的三种方式
(1)for循环:只能遍历索引数组
$arr=array('a','b','c'); $size=count($arr); for ($i=0;$i<$size;$i++){ echo $arr[$i]; }
(2)foreach循环:可以遍历索引数组和关联数组
$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); foreach ($arr as $val){ echo $val.'</br>'; } foreach ($arr as $key=>$val){ echo $key.'=>'.$val.'</br>'; }
(3)while、list()、each()组合循环:可以遍历索引数组和关联数组
each函数:$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); $lst=each($arr); var_dump($lst); /*结果 array (size=4) 1 => int 1 'value' => int 1 0 => string 'one' (length=3) 'key' => string 'one' (length=3) */ //下一次each时将移动到下一个元素 $lst=each($arr); var_dump($lst); /*结果 1 => int 2 'value' => int 2 0 => string 'two' (length=3) 'key' => string 'two' (length=3) */
list函数:将数组中的以整数为键值的元素按键值从小到大的顺序赋给自己的参数。
$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); $lst=each($arr); var_dump($lst); /*结果 array (size=4) 1 => int 1 'value' => int 1 0 => string 'one' (length=3) 'key' => string 'one' (length=3) */ list($key,$val)=$lst; echo $key.'=>'.$val; //结果 one=>1
while、list()、each()组合循环:
$arr=array( 'one'=>1, 'two'=>2, 'three'= b698 >3 ); while (list($key,$val)=each($arr)){ echo $key.'=>'.$val.'</br>'; } /*结果 one=>1 two=>2 three=>3 */
二、foreach引用修改问题
$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); foreach ($arr as &$k){ $k=$k*2; } var_dump($arr); foreach ($arr as $k){ echo $k."</br>"; } var_dump($arr);
结果是:
Why?
Because:
解决方法:
$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); foreach ($arr as &$k){ $k=$k*2; } var_dump($arr); unset($k);//取消引用 foreach ($arr as $k){ echo $k."</br>"; } var_dump($arr);
结果:
三、指针重置
while、list()、each()组合不会reset(),即指针重置,foreach遍历会对数组进行reset()操作。什么意思呢?
$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); while (list($key,$val)=each($arr)){ echo $key.'=>'.$val.'</br>'; } /*结果 one=>1 two=>2 three=>3 */ while (list($key,$val)=each($arr)){ echo $key.'=>'.$val.'</br>'; } /*结果为空 --> 指针还是指向最后一个 */
$arr=array( 'one'=>1, 'two'=>2, 'three'=>3 ); while (list($key,$val)=each($arr)){ echo $key.'=>'.$val.'</br>'; } /*结果 one=>1 two=>2 three=>3 */ reset($arr);//重置指针 while (list($key,$val)=each($arr)){ echo $key.'=>'.$val.'</br>'; } /*结果 one=>1 two=>2 three=>3 */
而foreach内置reset()函数,在调用完foreach的时候,系统指针就会重新指向第一个,因此不需要在foreach之前调用reset()函数!
相关文章推荐
- php 中遍历数组时使用引用出现的问题
- php 数组遍历的问题
- PHP对数组的高级遍历和操作处理方法
- PHP中遍历关联数组的方法
- PHP 遍历数组的方法汇总
- php数组遍历 使用while循环
- (转)深入理解PHP之数组(遍历顺序)
- PHP 数组遍历方法大全(foreach,list,each)
- PHP 数组遍历方法大全(foreach,list,each)
- javascript 对象数组不确定对象属性名遍历问题
- php 数组遍历性能的比较
- php数组的遍历讲解 for foreach list each key
- php 数组 深度遍历
- php排序问题(一维数组排序和二维数组排序)
- PHP 数组遍历 foreach 语法结构
- php中数组中&的问题
- iOS 数组遍历删除元素的问题
- PHP mysql_fetch_array遍历数据时的问题(指针需要复位)
- PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
- PHP 数组遍历 foreach 语法结构