PHP中for循环语句的几种变型


Posted in PHP onNovember 26, 2006

for语句可以说是PHP(同时也是多种语言)的循环控制部份最基本的一个语句了,for语句的执行规律和基础用法在这里就不多说,可以参见PHP手册for语句部分。PHP手册中对它的语法定义如下:

for (expr1; expr2; expr3)
statement

下面说说for语句几种有用的变型。

1、无限循环

首先是人尽皆知的无限循环(亦可称“死循环”)。由于空表达式null在语法上是有效的,所以我们可以把for语句的三个表达式留空,这样就会产生不断执行for嵌套语句的效果。

<?php
for (;;) {
    
//放置需要不断执行的语句
}
?>

虽然有一些任务会使用到无限循环,但是大多数程序任务,特别是PHP所能涉及的领域,在使用无限循环时都会添加一些终止循环的条件。

<?php
for (;;) {
    
//如果是公元2199年,则跳出循环
    
if (date('Y') == '2199') {
        break;
    }
}
?>

2、使用空表达式

接下来就是说说在初始化语句expr1中使用null语法,留空expr1最常见的作用就是完成更为复杂的初始化工作。

<?php
if (isset($i)) {
    unset(
$i);
    if ((int) 
date('') < 2008) {
        
$i 0;
    } else {
        
$i 1;
    }
} else {
    
$i =3;
}

for (;$i 10;$i++) {
    echo 
$i;
}
?>

同样道理,迭代表达式expr3也可能留空,也可以利用这点编写更为复杂的迭代式,比如说根据不同的条件调用不同的迭代式。

而for语句中的条件语句expr2留空则是上面所说的无限循环,当然也可以添加一些更为复杂的条件去判断什么时候跳出循环,在此不在重复。

3、多重循环

使用多重循环来控制多个变量也是在for语句中使经常被忽略的一个特性。如下面的例子,在一般的任务中用到的一般会是双重循环,三重以上的循环一般意义不大。

<?php
for ($i 0$j 10;$i <= 10;$i++, $j--) {
    echo 
"$i + $j = 10\r\n";
}
?>

以上代码将输出:
0 + 10 = 10
1 + 9 = 10
2 + 8 = 10
3 + 7 = 10
4 + 6 = 10
5 + 5 = 10
6 + 4 = 10
7 + 3 = 10
8 + 2 = 10
9 + 1 = 10
10 + 0 = 10

4、更为复杂的表达式

如果把for语句的三个表达式写得复杂一些,则可以用于优化算法。甚至可以使用没有循环体的for语句来完成一些任务。比如计算累加或阶乘:

<?php
//计算1-5的累加结果,斌值到$j
for ($i 1,$j 0$i <= 5;$j += $i++);
echo 
$j;

//计算1-5的阶乘结果,斌值到$j
for ($i 1,$j 1$i <= 5;$j *= $i++);
echo 
$j;

?>

PHP借助了C语言的语法,一定程度上也会拥有C的特性,比如说强大的for循环语句就是一个典型的例子。

PHP 相关文章推荐
PHP isset()与empty()的使用区别详解
Aug 29 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
PHP文件上传操作实例详解
Sep 27 PHP
php 访问oracle 存储过程实例详解
Jan 08 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 #PHP
PHP图片上传类带图片显示
Nov 25 #PHP
整合了前面的PHP数据库连接类~~做成一个分页类!
Nov 25 #PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 #PHP
xajax写的留言本
Nov 25 #PHP
SSI指令
Nov 25 #PHP
配置支持SSI
Nov 25 #PHP
You might like
PHP 高手之路(一)
2006/10/09 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
python实现简单socket通信的方法
2016/04/19 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
python3实现基于用户的协同过滤
2018/05/31 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Python实现对adb命令封装
2020/03/06 Python
Django Form常用功能及代码示例
2020/10/13 Python
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
会话Bean的种类
2013/11/07 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
学校岗位设置方案
2014/01/16 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
学生检讨书范文
2014/10/30 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis