浅谈PHP中foreach/in_array的使用


Posted in PHP onNovember 02, 2015

php在开发效率很高,这是无可厚非的,但是却是在牺牲执行效率的。php数组功能非常强大,但是也要多加考虑,多试几种情况情况,以防万一,这里,我就简单的说两个遇到的坑,以后如果有发现更多的,再补上吧!

foreach 提供了遍历数组的简单方式,可以很方便的读取到数据或对象的内容,但是官方文档说了,由于 foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。所以,基本上,
1、不要想在循环内部修改里面的值,否则结果将超出你想要的;
2、使用'&'是一个安全的方式,虽然很少用到,但是在用到时,在引用结束后,应立即调用unset函数销毁该变量,否则,在接下来的代码里,如果有再次使用到此变量,那么循环的最后一次值就将被修改了,从而得到了意外的值,比如:在列表循环输出时,最后一行输出将会出现许多乱七八糟的值或者空值。使用unset可解决此问题。

我们来看个示例

<?php 
/*-------------------------------------------------------------------------*/ 
/* foreach example 1: value only */ 
echo "foreach example 1: value only ".'<br />'; 
$a = array(1, 2, 3, 17); 
foreach ($a as $v) { 
echo "Current value of ".$a.":". $v."<br />"; 
} 
?> 
// 运行结果 
foreach example 1: value only 
Current value of $a: 1 
Current value of $a: 2 
Current value of $a: 3 
Current value of $a: 17

in_array,其含义是检查前一个字符串是否存在于后一个数组当中,而且大多数情况下,它也是这么工作的,但是当后面的数组是整数时,如array(0,1,2,3)时,就出问题了,php会将前的字符串进行intval,从而都会得到0这个值,那么如果恰巧,你的数组当中有这个值,那么等式就成立了,是不是又超出了预期呢?
所以,当确定后面的数据是整数时,尤其是还有可能为0(这个可能代替所有的字符串了),你就千万不能再使用这个函数了,可使用key_exists来代替,但是后面的数据则需要使用array_flip进行倒转操作了。

我们再来看个示例

function search($keyWord, $stack) {//此处判断是应该更新还是插入

      foreach ($stack as $key => $val) {

        if (in_array($keyWord, $val)) {

          return TRUE;

        }

      }

      return FALSE;

    }

当一个字符串被当作数组来去取值时,又会发生什么呢?php是一门容错性很强的语言,它会尽量帮你改正错误,所以很聪明地将你的引用下标转化为整数,当然就得到0了,那么字符串下标为0取值则又会得到第一个字符串的值,是不是又超出了你的预期呢?解决方法是,在引用下标之前,还是确认一下这个变量是不是一个数组吧,is_array。

虽然有许许多多的前辈遇到这样或那样的问题,也在不停地说,但是我们终究还是免不了,不停去犯错。这也许就是社会吧!大家都这么忙,哪有时间去破解你那烂代码! 哈哈

PHP 相关文章推荐
在线竞拍系统的PHP实现框架(一)
Oct 09 PHP
php读取msn上的用户信息类
Dec 05 PHP
php去除字符串换行符示例分享
Feb 13 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
thinkphp数据查询和遍历数组实例
Nov 28 PHP
php使用array_search函数实现数组查找的方法
Jun 12 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
php防止用户重复提交表单
Nov 02 #PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 #PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 #PHP
php三种实现多线程类似的方法
Oct 30 #PHP
php搜索文件程序分享
Oct 30 #PHP
纯php生成随机密码
Oct 30 #PHP
php利用smtp类实现电子邮件发送
Oct 30 #PHP
You might like
php访问查询mysql数据的三种方法
2006/10/09 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
js数据类型检测总结
2018/08/05 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
解决python运行效率不高的问题
2020/07/20 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
python 实现简易的记事本
2020/11/30 Python
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
心得体会范文
2014/01/04 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
谢师宴学生致辞
2015/07/27 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书