浅谈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将任何格式视频转为flv的代码
Sep 03 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
举例讲解PHP面对对象编程的多态
Aug 12 PHP
PHP获取指定日期是星期几的实现方法
Nov 30 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
php-7.3.6 编译安装过程
Feb 11 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php导入模块文件分享
2015/03/17 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
python网络编程之读取网站根目录实例
2014/09/30 Python
Python+django实现文件上传
2016/01/17 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
Python如何生成树形图案
2018/01/03 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
dpn网络的pytorch实现方式
2020/01/14 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
高级人员简历的自我评价分享
2013/11/03 职场文书
高中生自我评语大全
2014/01/19 职场文书
会计人员岗位职责
2014/03/19 职场文书
中队活动总结
2014/08/27 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
毕业证委托书范文
2014/09/26 职场文书
搬迁通知
2015/04/20 职场文书
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技