为啥 PHP in_array(0,['a', 'b', 'c']) 返回为 true?
问题背景
在实际PHP编码过程中,总会出现一些我们意料之外的情况,如以下几例:
但是,直观上看, 0并没有包含在['a', 'b', 'c']数组中,也不会等于'abc'这个字符串。那怎么解释上述的返回结果呢?
类型转换
究其原因:在数据比较前,PHP做了类型转换。引用PHP官网关于“String conversion to numbers”解释如下:
文章开篇例子中,string类型数据第一个字符不是数字,就会转换为0,例如:
in_array() 和 array_search() 默认都是松散比较,相当于==,即得到true。
严格比较
那怎么得到我们预期的结果呢?推荐使用严格比较,如下所示:
false 与 null
那么,如果用false和null与字符串数组比较,结果会如何呢?
null与false做比较值,字符串数组是不会转换为int型的。
数组中有true
另一个看起来比较奇怪的现象,如下图所示:
总结
PHP语言本身是弱类型语言,为了便于应用处理,会做一些类型转换操作。
同时为了保证转换精度准确性等问题,PHP官方建议:不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
Thanks for reading!
版权声明: 本文为 InfoQ 作者【flyer0126】的原创文章。
原文链接:【http://xie.infoq.cn/article/a2cf1785c81cc81a48f21a088】。文章转载请联系作者。
评论