PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)
2013-12-30 23:14
786 查看
* 使用foreach遍历数组时要注意的问题:
* 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历
* 2.foreach遍历完成之后,指针是没有指向数组的任何一个元素的,也就是此时数组没有指针指向,所以紧接着使用each遍历时没有元素输出
* 3.foreach与for循环的效率比较:foreach要优于for,因为for需要获得数组的长度通过i++才能遍历,而foreach不需要计算数组长度
* 4.foreach与while+each遍历的效率比较:
* 在对数组进行‘读’操作时:foreach比while+each快
* 在对数组进行‘写’操作时:while+each比froeach快
* 之所以会出现这样的结果,是因为:PHP内核的采用的复制机制是"引用计数,写时复制",
* 也就是说变量的内容在没有改变之前,只计算有多少个变量名指向这块内存空间,在改变时才会真正的复制,并重新进行内存分配
* 总结:foreach可用于读取大量数据,但不适用于读取时对大量数据做修改操作
* 5.foreach与each的区别:
* each遍历数组时,是从当前的数组指针开遍历,相当于next,当数组遍历完成后,
* 和foreach一样,指针已经指向了数组元素的最后一个的下一个,也是就null,数组失去了指针指向
* 但是和froeach不一样的是,each遍历之前,不会重置数组指针,而foreach会,each是对原数组操作,foreach是对拷贝的数组操作
*
* 注意:foreach是对数组的拷贝进行操作,foreach 不支持用“@”来抑制错误信息的能力
*
* 关于"引用计数,写时复制"的参考文章:
* PHP内核探索:写时复制COW机制:/article/1307542.html
* PHP内核探索:变量的引用与计数规则:/article/1307501.html
*/
* 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历
* 2.foreach遍历完成之后,指针是没有指向数组的任何一个元素的,也就是此时数组没有指针指向,所以紧接着使用each遍历时没有元素输出
* 3.foreach与for循环的效率比较:foreach要优于for,因为for需要获得数组的长度通过i++才能遍历,而foreach不需要计算数组长度
* 4.foreach与while+each遍历的效率比较:
* 在对数组进行‘读’操作时:foreach比while+each快
* 在对数组进行‘写’操作时:while+each比froeach快
* 之所以会出现这样的结果,是因为:PHP内核的采用的复制机制是"引用计数,写时复制",
* 也就是说变量的内容在没有改变之前,只计算有多少个变量名指向这块内存空间,在改变时才会真正的复制,并重新进行内存分配
* 总结:foreach可用于读取大量数据,但不适用于读取时对大量数据做修改操作
* 5.foreach与each的区别:
* each遍历数组时,是从当前的数组指针开遍历,相当于next,当数组遍历完成后,
* 和foreach一样,指针已经指向了数组元素的最后一个的下一个,也是就null,数组失去了指针指向
* 但是和froeach不一样的是,each遍历之前,不会重置数组指针,而foreach会,each是对原数组操作,foreach是对拷贝的数组操作
*
* 注意:foreach是对数组的拷贝进行操作,foreach 不支持用“@”来抑制错误信息的能力
*
* 关于"引用计数,写时复制"的参考文章:
* PHP内核探索:写时复制COW机制:/article/1307542.html
* PHP内核探索:变量的引用与计数规则:/article/1307501.html
*/
<?php $arr3=array ('bian'=>'编','cheng'=>'程','shi'=>'世','jie'=>'界',1,2,3); $arr2=array (5,4,2,6,1,8); echo '使用 指针函数 遍历循环数组中的值: '; echo("\n"); echo current($arr2)."\n"; $k=0; while ($k<(count($arr2)-1)) { $k++; echo next($arr2)."\n"; } echo '使用 for 遍历循环数组中的值: '; echo("\n"); for ($i=0; $i <count($arr2) ; $i++) { echo $arr2[$i]."\n"; } echo '使用 foreach 遍历循环数组中的值: '; echo("\n"); foreach ($arr2 as $key => $value) { echo $key."===".$value."\n"; } echo "当前元素:".current($arr2)."\n"; reset($arr2); echo '使用 while---each 遍历循环数组中的值: '; echo("\n"); while ($a= each($arr2)) { //echo $a[0]."===".$a[1]."\n"; echo $a["key"]."===".$a["value"]."\n"; } reset($arr2); echo '使用 while--list--each 遍历循环数组中的值: '; echo("\n"); while (list($key,$val)= each($arr2)) { echo $key."=".$val."\n"; } //结果>>>: //使用 指针函数 遍历循环数组中的值: // 5 // 4 // 2 // 6 // 1 // 8 // 使用 for 遍历循环数组中的值: // 5 // 4 // 2 // 6 // 1 // 8 // 使用 foreach 遍历循环数组中的值: // 0===5 // 1===4 // 2===2 // 3===6 // 4===1 // 5===8 // 当前元素: // 使用 while---each 遍历循环数组中的值: // 0===5 // 1===4 // 2===2 // 3===6 // 4===1 // 5===8 // 使用 while--list--each 遍历循环数组中的值: // 0=5 // 1=4 // 2=2 // 3=6 // 4=1 // 5=8 ?>
相关文章推荐
- PHP 遍历数组for foreach while
- php数组的遍历讲解 for foreach list each key
- php数组的遍历讲解 for foreach list each key
- Android程序员学PHP开发(21)-使用foreach、list、while、each遍历数组-PhpStorm
- 数组、List、ArrayList的使用以及for、foreach效率比较
- php数组的遍历讲解 (for foreach list each key )
- php中常用遍历数组的方法(foreach,while list each)
- php数组的遍历讲解 for foreach list each key
- php数组的遍历讲解 for foreach list each key
- php的foreach,while,for的性能比较
- C#复制数组的两种方式,以及效率比较
- PHP学习笔记——使用list(),each(),while()循环遍历数组
- 深入for,while,foreach遍历时间比较的详解
- PHP循环遍历数组的3种方法list()、each()和while总结
- PHP 数组遍历方法大全(foreach,list,each)
- javascript中for、each以及foreach的效率对比
- 深入for,while,foreach遍历时间比较的详解
- php代码优化系列(二) -- array_walk 和 foreach, for 的效率的比较
- JS几种数组遍历方式以及性能分析对比
- C# for和 foreach 的数组遍历 比较