找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 703|回复: 0
打印 上一主题 下一主题

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

[复制链接]

3444

主题

3465

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11142
跳转到指定楼层
楼主
发表于 2018-2-14 05:33:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            先介绍一下需求背景:
发票方式:
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 in_array 函数使用说明与in_array需要注意的地方说明
  • PHP IN_ARRAY 函数使用注意事项
  • php数组函数序列之in_array() 查找数组值是否存在
  • php数组函数序列之in_array() - 查找数组中是否存在指定值
  • 遭遇php的in_array低性能问题
  • 使用js判断数组中是否包含某一元素(类似于php中的in_array())
  • 类似php的js数组的in_array函数自定义方法
  • 2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
  • php数组查找函数in_array()、array_search()、array_key_exists()使用实例
  • PHP函数in_array()使用详解
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端