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 相关文章推荐
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
php过滤敏感词的示例
Mar 31 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
php显示页码分页类的封装
Jun 08 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 PHP
PHP高并发和大流量解决方案整理
Mar 09 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
使用php4加速网络传输
2006/10/09 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
vue2 前端搜索实现示例
2018/02/26 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
深入理解python对json的操作总结
2017/01/05 Python
python实现俄罗斯方块游戏
2020/03/25 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
python3.x实现base64加密和解密
2019/03/28 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python适合人工智能的理由和优势
2019/06/28 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
python 实现音频叠加的示例
2020/10/29 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
软件测试面试题
2014/01/05 面试题
servlet面试题
2012/08/20 面试题
销售类个人求职信范文
2013/09/25 职场文书
结婚典礼证婚词
2014/01/08 职场文书
茶叶生产计划书
2014/01/10 职场文书
应聘教师自荐书
2014/06/16 职场文书
求职信的正确写法
2014/07/10 职场文书
学生犯错保证书
2015/05/09 职场文书
MySQL之DML语言
2021/04/05 MySQL
实例详解Python的进程,线程和协程
2022/03/13 Python
Redis实现分布式锁的五种方法详解
2022/06/14 Redis