php foreach循环用法介绍
例
代码如下 | 复制代码 |
<?php |
开始运行foreach第一次,这时 $key='a';$value='网上';
输出后第二次运行 这时 $key='b';$value='朋友';
输出后第三次运行 这时 $key='c';$value='其它';
这时数组已经到了尾部,退出循环
例
代码如下 | 复制代码 |
<? 1,"two"=>2,"three"=>3,"four"=>4); $array2=array(5,6,7,8); ?> 结果是 $array1=array("one"=>1,”two”=>2,”three”=>3,”four”=>4); $array2=array(5,6,7,8); ?> |
为了便于理解,我们假定这里的$array是一个一维的相关数组,$key是数组的索引,$value是这个索引的值,它们的名字可以随意,之所以叫$key和$value是为了便于理解。为了能让你更好的理解foreach的工作过程,我们来创建一个数组:
$array = array('first'=>'ibm','second','hp');
现在我们模拟PHP服务用foreach对$array进行遍历:
代码如下 | 复制代码 |
foreach ($array as $key=>$value) { echo $key.'=>'$value; } |
第一次循环,$key = 'first',$value = 'ibm',这个时候,实际foreach对$array执行了一个我们看不见的操作
foreach循环中使用引用要注意
发现了一个容易出错,但是不懂得原理却解释不明白的问题
代码如下 | 复制代码 |
foreach ($array as &$row) { $row = explode(‘/’, $row); } foreach ($array as $row) { //do something } |
这么写,在第二个循环会出逻辑错误,加入第二个循环中do something的地方是输出$row,循环到最后一个的时候的输出是倒数第二个元素,而不是最后一个
要这么写
代码如下 | 复制代码 |
foreach ($array as &$row) { 或者第一个循环这么写 foreach ($array as $key => $row) { |
请记住从PHP文件创建的教训,我们创建了一个文件,名为testFile.txt 。
代码如下 | 复制代码 |
$myFile = "testFile.txt"; $myFile = "testFile.txt"; |
例
代码如下 | 复制代码 |
$filename = 'file.txt'; |
删除目录下所有文件
代码如下 | 复制代码 |
function delFileUnderDir( $dirName="../Smarty/templates/templates_c" ) |
先来看ob_start用法
使用PHP ob_start()函数打开browser的cache,这样可以保证cache的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出
代码如下 | 复制代码 |
<?php ob_start(); //打开缓冲区 ?> |
PHP ob_start()函数一个很大的特点;也可以使用ob_start的参数,在cache被写入后,然后自动运行命令,比如ob_start(”ob_gzhandler”);而我们最常用的做法是用ob_get_contents()得到cache中的内容
面的代码是一个压缩网页的例子,我 们利用ob_gzip函数,使用ob_start将输出内容压缩后放到“缓冲区”后再输出。
代码如下 | 复制代码 |
//启用压缩 |
代码如下 | 复制代码 |
<? // Start snipit 1 $sql = "SELECT * from <table>"; while ($row = mysql_fetch_assoc($result)) { mysql_data_seek($result, 0); //关键是这儿 while ($row = mysql_fetch_assoc($result)) { |
定义和用法
mysql_data_seek() 函数移动内部结果的指针。
语法
mysql_data_seek(data,row)参数 描述
data 必需。返回类型为 resource 的结果集。该结果集从 mysql_query() 的调用中得到。
row 必需。想要设定的新的结果集指针的行数。0 指示第一个记录。
说明
mysql_data_seek() 将 data 参数指定的 MySQL 结果内部的行指针移动到指定的行号。
接着调用 mysql_fetch_row() 将返回那一行。
row 从 0 开始。row 的取值范围应该从 0 到 mysql_num_rows - 1。
但是如果结果集为空(mysql_num_rows() == 0),要将指针移动到 0 会失败并发出 E_WARNING 级的错误,mysql_data_seek() 将返回 false。
返回值
如果成功则返回 true,失败则返回 false。
php中is_dir,is_file,file_exists函数性能分析
php,is_dir,is_file,file_exists
很显然file_exists是受了asp的影响,因为asp不但有fileExists还有folderExists,driverExists,那么PHP中file_exists是什么意思呢?
PHP的 file_exists = is_dir + is_file
它既可以判断文件是否存在,又可以判断目录是否存在。但这样一个全面的函数执行效率非常低,就像asp中request不指定是form,还是get,cookies,所以结论是:
◦如果要判断目录是否存在,请用独立函数 is_dir(directory)
◦如果要判断文件是否存在,请用独立函数 is_file(filepath)
--------------------------------------------------------------------------------------
is_file 只判断文件是否存在;
file_exists 判断文件是否存在或者是目录是否存在;
is_dir 判断目录是否存在;
查看手册,虽然这两个函数的结果都会被缓存,但是is_file却快了N倍。
还有一个值得注意的:
文件存在的情况下,is_file比file_exists要快N倍;
文件不存在的情况下,is_file比file_exists要慢;
结论是,file_exits函数并不会因为该文件是否真的存在而影响速度,但是is_file影响就大了
看了这篇PHP中file_exists与is_file,is_dir的区别的说法基本明白,PHP的 file_exists = is_dir + is_file。
写程序验证一下:
分别执行1000次,记录所需时间。
代码如下 | 复制代码 |
文件存在(当前目录) 文件存在(绝对路径3层/www/hx/a/) 文件存在(绝对路径5层/www/hx/a/b/c/) 文件不存在(当前目录) 文件不存在(绝对路径5层/www/hx/a/b/c/) 目录存在 |
is_file($file)
file_exists($file)
当$file是目录时,is_file返回false,file_exists返回true
文件存在的情况下,is_file比file_exists要快得多;
要检测文件所在的目录越深,速度差越多,但至少快4倍。
文件不存在的情况下,is_file比file_exists要慢一点点,但可以忽略不计。
目录存在的情况下,is_dir比file_exists要快得多;
目录不存在的情况下,is_dir比file_exists要慢一点点,但可以忽略不计。
结论:
如果要判断文件是否存在,用函数 is_file(),
如果要判断目录是否存在,用函数 is_dir(),
好像没地方需要用file_exists了,不确定传入的参数是文件还是目录的时候用?
相关文章
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20浅谈Java8 的foreach跳出循环break/return
这篇文章主要介绍了Java8 的foreach跳出循环break/return,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-28- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
mybatis-plus mapper中foreach循环操作代码详解(新增或修改)
这篇文章主要介绍了mybatis-plus mapper中foreach循环操作代码详解(新增或修改),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-17- 这篇文章主要介绍了Nodejs 数组的队列以及forEach的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25
- 这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
PHP中print_r、var_export、var_dump用法介绍
文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25Framewrok7 视图介绍(views、view)使用介绍
下面我们来看一篇关于Framewrok7 视图介绍(views、view)使用介绍吧,希望这篇文章能够帮助到各位朋友。 一、Views 与View的介绍 1,Views (<div class="views">) (1)Vi...2016-10-02- 这篇文章主要介绍了C#使用foreach语句遍历二维数组的方法,实例分析了C#遍历数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- PHP日志类库在低版本中我们都没有看到了但在高版本的php中就有了,下面我们来看一篇关于PHP日志类库使用详解介绍吧. Monolog遵循PSR3的接口规范,可以很轻易的替换...2016-11-25
解决mybatis使用foreach批量insert异常的问题
这篇文章主要介绍了解决mybatis使用foreach批量insert异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09- 这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
- 介绍性指南 mod_perl 是个庞大而复杂的工具,它内建了许多模块帮助你方便地构建动态网站。这篇指南的目的是帮助你构建一个良好的 mod_perl 模块,并从中理解 mod_perl 的实现...2020-06-29
- 1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
- foreach()有两种用法 1: foreach(array as $value) { 表达式; } 这里的array是你要遍历的数组名,每次循环中,array数组的当前元素的值被赋给$value,...2016-11-25
- 在php中要获取或目录权限我们可使用fileperms函数来获取,fileperms() 函数返回文件或目录的权限,。若成功,则返回文件的访问权限。若失败,则返回 false。 例子 1 ...2016-11-25
- php默认时区是欧美国家的所以与我们中国时区相差了整整8小时哦,下面我来给各位介绍php设置时区方法,有需要了解的朋友可进入参考。 在 php.ini 中,默认是 date.timez...2016-11-25
- 这篇文章主要介绍了C#如何检查foreach判读其是否为null,文中给出了示例代码,介绍的很详细,需要的朋友可以参考下方法...2020-06-25
- OpenCart是国外著名的开源电子商务系统,由英国人Daniel一人独立开发,其社区非常活跃,由各国网友翻译出来的语言包已经达到18种,其中包括中文,俄文,法文,西班牙文,德文等等,下面...2016-10-10