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动态图像的创建
Oct 09 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP isset()与empty()的使用区别详解
Aug 29 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
PHP实现单例模式最安全的做法
2014/06/13 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
Postman参数化实现过程及原理解析
2020/08/13 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
RC4文件加密的python实现方法
2015/06/30 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
python dict如何定义
2020/09/02 Python
优纳科技软件测试面试题
2012/05/15 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
本科生个人求职自荐信
2013/09/26 职场文书
保险公司演讲稿
2014/09/02 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
五年级语文教学反思
2016/03/03 职场文书
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android