PHP中in_array函数使用的问题与解决办法


Posted in PHP onSeptember 11, 2016

先介绍一下需求背景:

发票方式:

0=捐赠(不要问我为什么,历史原因)

1=对中寄送

2=索取

3=电子发票

现在要对用户提交的数据进行检测:

php;auto-links:false;">if(!in_array($_POST['invoice_action'], array(0,1,2,3))){ 
  throw new Exception('请选择正确的发票方式'); 
}

这个时候出现一个问题,如果压根就不存在$_POST[‘invoice_action']这个值,为什么没有抛出异常?

经确认,这就是PHP作为弱类型语言的一个坑,没错,这是一个坑.

看一下这组代码:

echo in_array('', array(0)) ? 1 : 0;   // 结果:1
echo in_array(null, array(0)) ? 1 : 0;  // 结果:1
echo in_array(false, array(0)) ? 1 : 0; // 结果:1

这么大一个坑,我们要怎么绕过或者填起呢?

方法一:in_array支持第三个参数,强制对数据类型检测

echo in_array('', array(0), true) ? 1 : 0;   // 结果:0
echo in_array(null, array(0), true) ? 1 : 0;  // 结果:0
echo in_array(false, array(0), true) ? 1 : 0; // 结果:0

方法二:依然是数据类型方向,把数组中的0改为字符串

echo in_array('', array('0'), true) ? 1 : 0;   // 结果:0
echo in_array(null, array('0'), true) ? 1 : 0;  // 结果:0
echo in_array(false, array('0'), true) ? 1 : 0; // 结果:0

总结

以上就是关于PHP中in_array函数使用时遇到的问题与解决办法,希望这篇文章对同样遇到这个问题的朋友能有所帮助,如果大家有疑问可以留言交流。

PHP 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
PHP4实际应用经验篇(4)
Oct 09 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
PHP 防注入函数(格式化数据)
Aug 08 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
PHP图像处理类库及演示分享
May 17 PHP
PHP中each与list用法分析
Jan 08 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
php 微信开发获取用户信息如何实现
Dec 13 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
May 29 PHP
详解PHP中array_rand函数的使用方法
Sep 11 #PHP
PHP入门教程之上传文件实例详解
Sep 11 #PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 #PHP
PHP入门教程之表单与验证实例详解
Sep 11 #PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 #PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 #PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 #PHP
You might like
从php核心代码分析require和include的区别
2011/01/02 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
JS继承用法实例分析
2015/02/05 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
python Matplotlib模块的使用
2020/09/16 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
安全责任协议书
2014/04/21 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
采购员岗位职责范本
2015/04/07 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
Python基础学习之奇异的GUI对话框
2021/05/27 Python
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技