PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)
* 使用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机制:http://www.nowamagic.net/librarys/veda/detail/1454
* PHP内核探索:变量的引用与计数规则:http://www.nowamagic.net/librarys/veda/detail/1581
*/
<?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 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)的更多相关文章
- PHP数组循环遍历的四种方式
1.使用for循环遍历数组 conut($arr);用于统计数组元素的个数. for循环只能用于遍历,纯索引数组!!!! 如果存在关联数组,count统计时会统计两种数组的总 ...
- PHP数组循环遍历的几种方式
PHP数组循环遍历 1.for循环 <?php //语法 for (init counter; test counter; increment counter) { code to be exe ...
- php中的数组遍历的几种方式
[(重点)数组循环遍历的四种方式] 1.使用for循环遍历数组 conut($arr);用于统计数组元素的个数. for循环只能用于遍历,纯索引数组!!!! 如果存在关联数 ...
- C++ 数组遍历的两种方式
C++ 数组遍历的两种方式: #include <iostream> using namespace std; int main() { // 一维数组 ] = {, , , , }; / ...
- Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
示例代码如下: package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- [Java] HashMap遍历的两种方式
Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...
- map遍历的四种方式
原文 http://blog.csdn.net/dayanxuqun/article/details/26348277 以下是map遍历的四种方式: // 一.推荐只用value的时候用,都懂的... ...
- java数组的声明由几种方式
数组的声明由几种方式: 1,String []a = new String[length];再赋值 a[0]=?;....... 2,new完就直接初始化: String []a = new Stri ...
随机推荐
- MVC5-10 ModleBinder那点事
模型绑定器 之前或多或少也提到过模型绑定器,方法的形参就是由模型绑定器把参数绑定上去的,今天就说说ModuleBingder那点事 在MVC中有一个接口叫IModuleBinder // // 摘要: ...
- class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
今天在工作中遇到了下面的问题: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springfram ...
- Oracle 数据库对象
数据库对象是数据库的组成部分,常常用CREATE命令进行创建,可以使用ALTER命令修改,用DROP执行删除操作.前面已经接触过的数据库对象有表.用户等. 今天将学习更多的Oracle数据库对象: 同 ...
- Git工具:Widows下的使用(提交到Github)
2016年12月9日17:07:07 Git工作原理 http://deweixu.me/2016/11/05/how-git-works/ 2016年12月1日14:25:23 ---------- ...
- JS性能方面--内存管理及ECMAScript5 Object的新属性方法
Delete一个Object的属性会让此对象变慢(多耗费15倍的内存) var o = { x: 'y' }; delete o.x; //此时o会成一个慢对象 o.x; // var o = { x ...
- angularjs工具方法
1.angular.extend var dst = {name: 'xxx', country: 'China'}; var src1 = {name: 'yyy', age: 10}; var s ...
- easyUI增加视图分组的办法
1.在JSP头文件中引入如下代码 <script type="text/javascript" src="${pageContext.request.context ...
- Flask-WTF form doesn't have attribute 'validate_on_submit'问题
今天在学习WTF表单的时候遇到了这个问题,在stackoverflow上搜索查到了解决方案 from flask.ext.wtf import Form from wtforms import Tex ...
- Java——Selector
- JavaScript排序算法——快速排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...