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的memory_limit限制的方法分享
Feb 21 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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 防注入函数(格式化数据)
2011/08/08 PHP
php文件缓存类汇总
2014/11/21 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JavaScript中的闭包
2016/02/24 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
python sort、sort_index方法代码实例
2019/03/28 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
python破解同事的压缩包密码
2020/10/14 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
会计系个人求职信范文分享
2013/12/20 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
学习两会精神心得范文
2014/03/17 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
煤矿安全生产标语
2014/06/06 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
python区块链实现简版工作量证明
2022/05/25 Python
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android