PHP数组循环操作详细介绍 附实例代码


Posted in PHP onFebruary 03, 2013

PHP数组还是比较常用的,于是我研究了一下PHP数组循环操作,在这里拿出来和大家分享一下,希望对大家有用。PHP基本上就是一种数组语言。时常要进行大量的PHP数组循环操作,主要有两种方式,一种是foreach,另一种是while,到底哪种好哪种坏一直有争论,虽然我很早就意识到了这个问题,但是一直没有细究,懵懂的感觉一直持续到现在,为了以后能节省点CPU时间,下面总结一下:

在循环里进行的是数组“读”操作,则foreach比while快,PHP数组循环操作无格式查看复制到剪贴板打印代码?

foreach($arrayas$value){ 
echo$value; 
} 
while(list($key)=each($array)){ 
echo$array[$key]; 
} 
foreach($arrayas$value){ 
echo$value; 
} 
while(list($key)=each($array)){ 
echo$array[$key]; 
}

在循环里进行的是数组“写”操作,则while比foreach快:

无格式查看复制到剪贴板打印代码?

foreach($arrayas$key=>$value){ 
echo$array[$key]=$value.'...'; 
} 
while(list($key)=each($array)){ 
$array[$key]=$array[$key].'...'; 
} 
foreach($arrayas$key=>$value){ 
echo$array[$key]=$value.'...'; 
} 
while(list($key)=each($array)){ 
$array[$key]=$array[$key].'...'; 
}

总结:通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很快的,这是因为PHP采用的复制机制是“引用复制,写时拷贝”,这样看来,foreach的高效读操作就不难理解了。另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结论,多数情况下,类似foreach($arrayas$key=>$value)形式的代码都应该被替换成while(list($key)=each($array))。

这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几百几千几万次数组循环操作,差异就会明显放大。

有关php数组及循环的小例子,包括二维数组、杨辉三角、获取参数、矩形对角线求和,有需要的朋友建议看看

<?php
//1、使用循环语句,输出任意一个二维数组 。
$arr=array(
array(1,2,3,4),
array(5,6,7,8),
array(9,10,11,12),
array(13,14,15,16)
);
foreach ($arr as $var){
foreach ($var as $val1){
echo "$val1 ";
}
echo "<br>";
}
echo "<br>";
//2、使用循环控制语句,输出杨辉三角。
function yanghuisanjiao($line){
$sc[][]=array();
$sc[0][0]=1;
for($i=1;$i<=$line;$i++){
for($j=0;$j<=$i;$j++){
if($j==0 or $i==$j){
$sc[$i][$j]=1; //把每行的第一个数字和最后一个数字设为1
}else{
$sc[$i][$j]=$sc[$i-1][$j-1]+$sc[$i-1][$j];
}
}
}
foreach ($sc as $value){
foreach($value as $v1){
echo $v1.' ';
}
echo '<p>';
}
}
yanghuisanjiao(5);
echo "<br>";
//3、使用循环和预定义变量,获取多个参数。参数的个数未定。
function avg(){
$ags=func_get_args();
$sum=0;
foreach ($ags as $v){
$sum+=$v;
}
return '平均值是:'.$sum/func_num_args();
}
echo avg(1,2,3,4,5,6,7);
//4、使用循环输出一个二维数组,并求该矩形对角线元素的和。
function getSum($theCount){
$b=0;
echo '</p>';
echo "<table>";
for($i=1;$i<=$theCount;$i++){
echo "<tr>";
for($j=1;$j<=$theCount;$j++){
   if($j==$i || $theCount+1-$i==$j){
    echo "<td style='color:#f00'>$j</td>";
    $b=$b+$j;
    if($j==$i && $theCount+1-$i==$j){
     $b=$b+$j;
    }
   }
   else{
    echo "<td>$j</td>";
   }
}
echo "</tr>";
}
echo "<table>";
echo "对角线元素之和为:".$b;
}
getSum(6);
?>
PHP 相关文章推荐
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
codeigniter实现get分页的方法
Jul 10 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 #PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 #PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 #PHP
php存储过程调用实例代码
Feb 03 #PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 #PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 #PHP
php数组去重的函数代码
Feb 03 #PHP
You might like
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
浅析jQuery的链式调用之each函数
2010/12/03 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
javascript简易画板开发
2020/04/12 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
python实现批量改文件名称的方法
2015/05/25 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python ellipsis 的用法详解
2020/11/20 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
2015社区个人工作总结范文
2015/05/13 职场文书
关于开学的感想
2015/08/10 职场文书