浅谈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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
如何用PHP实现插入排序?
Apr 10 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
php 模拟POST提交的2种方法详解
Jun 17 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
Yii2分页的使用及其扩展方法详解
May 23 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 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设置一边执行一边输出结果的代码
2013/09/30 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
php中数组最简单的使用方法
2020/12/27 PHP
JavaScript静态的动态
2006/09/18 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
Highcharts入门之简介
2016/08/02 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python字典序问题实例
2014/09/26 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
python 统计代码行数简单实例
2017/05/04 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
使用pandas读取文件的实现
2019/07/31 Python
python实例化对象的具体方法
2020/06/17 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
2015教师年度工作总结范文
2015/04/07 职场文书
运动会宣传稿100字
2015/07/23 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js