为什么PHP in_array(0,['a', 'b', 'c']) 返回为true
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇文章为大家展示了为什么PHP in_array(0,['a', 'b', 'c']) 返回为true,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。0、 问
千家信息网最后更新 2025年12月04日为什么PHP in_array(0,['a', 'b', 'c']) 返回为true0、 问题背景 1、 类型转换 2、 严格比较 3、 false 与 null 4、 数组中有true
本篇文章为大家展示了为什么PHP in_array(0,['a', 'b', 'c']) 返回为true,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
在具体PHP编码过程中,总会出现一些我们认为不可能的情况,如下几例:
in_array(0, ['a', 'b', 'c']) // 返回bool(true),相当于数组中有0
array_search(0, ['a', 'b', 'c']) // 返回int(0),相当于是第一个值的下标
0 == 'abc' // 返回bool(true),相当于等值但是,直观上看, 0并没有包含在['a', 'b', 'c']数组中,也不会等于'abc'这个字符串。那怎么解释上述的返回结果呢?
究其原因:在数据比较前,PHP做了类型转换。引用PHP官网关于"String conversion to numbers"解释如下:
When a string is evaluated in a numeric context, the resulting value and type are determined as follows.
If the string does not contain any of the characters '.', 'e', or 'E' and the numeric value fits into integer type limits (as defined by PHP_INT_MAX), the string will be evaluated as an integer. In all other cases it will be evaluated as a float.
The value is given by the initial portion of the string. If the string starts with valid numeric data, this
will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.
文章开篇例子中,string类型数据第一个字符不是数字,就会转换为0,例如:
echo intval('abc'); // 输出0inarray()和arraysearch()默认都是松散比较,相当于==,即得到true。
那怎么得到我们预期的结果呢?使用严格比较,如下所示:
in_array(0, ['a', 'b', 'c'], true) // 返回bool(false)
array_search(0, ['a', 'b', 'c'], true) // 返回bool(false)
0 === 'abc' // 返回bool(false)那么,如果用false和null与字符串数组比较,结果会如何呢?
in_array(null, ['a', 'b', 'c']) // 返回bool(false)
in_array(false, ['a', 'b', 'c']) // 返回bool(false)null与false做比较值,字符串数组是不会转换为int型的。
另一个看起来比较奇怪的现象
in_array('a', [true, 'b', 'c']) // 返回bool(true),相当于数组里面有'a'
array_search('a', [true, 'b', 'c']) // 返回int(0),相当于找到了字符串'a'PHP语言本身是弱类型语言,为了便于应用处理,会做一些类型转换操作。
同时为了保证转换精度准确性等问题,PHP官方建议:不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
上述内容就是为什么PHP in_array(0,['a', 'b', 'c']) 返回为true,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
数组
字符
类型
字符串
结果
内容
技能
数据
文章
知识
语言
问题
解释
松散
简明
直观
简明扼要
下标
例子
准确性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
虚拟机win10服务器挂起
喜欢编程不喜欢软件开发
服务器系统类型有哪些
锐捷云课堂服务器要不要关机
网络安全宣传周模拟
网络技术应用题详解
长沙网络技术专业
数据库wps2019
护苗网络安全课 网盘
两个数据库一个空间
大理精益管理软件开发
手机登陆王者荣耀显示服务器
浙江智能软件开发价钱
软件开发风险预测
低价云服务器
网络安全员日志登记
建行软件开发笔试都考哪些
创建数据库tsql语句
公务员网络安全管理警察报考要求
软件开发讲师
贵阳云岩思远软件开发有限公司
vb读取文件文本数据库
怎么判断是不是数据库实体
万诚网络技术有限公司
联想存储服务器4599电源多大
莫纳克换服务器主板
创建数据库tsql语句
贵州手机软件开发外包
图书馆数据库多少钱
小学生制作网络安全公益广告