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 相关文章推荐
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
php检测文件编码的方法示例
Apr 25 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
php文件上传原理与实现方法详解
Dec 20 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
9个实用的PHP代码片段分享
2015/01/22 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
Python Trie树实现字典排序
2014/03/28 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python中的global关键字的使用方法
2019/08/20 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
专业见习报告范文
2014/11/03 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL