转载php in_array()问题
2017-04-19 09:35
218 查看
先附上转载地址 http://www.awaimai.com/2078.html 本文仅作为笔记
在PHP中,数据会自动转换类型后再进行比较。
这样可能会导致一些费解的现象:
这两个表达式都返回
直观上看,
那怎么会返回
原因就在于,在比较前,PHP做了类型转换。
PHP官网上的说明:http://php.net/manual/en/language.types.string.php#language.types.string.conversion
而如果
那如何得到
用严格比较,如下,
强制做类型比较,这样就能拿到精确的结果。
那么,如果用
它们是不会转换成
另外一个看起来比较奇怪的现象:
这是为什么呢?
说起来也很好理解,松散比较下,任何
要想不相等,老办法,用严格比较。
参考资料:
Php, in_array, 0 value
PHP in_array() / array_search() odd behaviour
String conversion to
numbers
在PHP中,数据会自动转换类型后再进行比较。
这样可能会导致一些费解的现象:
in_array(0, ['a', 'b', 'c']) // 返回bool(true),也就相当于数组中有0 array_search(0, ['a', 'b', 'c']) // 返回int(0),也就是第一个值的下标 0 == 'abc' // 返回bool(true),也就相当于相等
这两个表达式都返回
true。
直观上看,
0没有在数组
['a', 'b', 'c']中,也不会等于
abc这个字符串。
那怎么会返回
true呢?
1 类型转换
原因就在于,在比较前,PHP做了类型转换。PHP官网上的说明:http://php.net/manual/en/language.types.string.php#language.types.string.conversion
string类型的数据会转换成
int型,然后再比较。
而如果
string类型数据第一个字符不是数字,就会转换成
0。例如,
echo intval("Bye"); // 输出0
in_array()和
array_search()默认都是松散比较,相当于
==,所以就得到
true。
2 严格比较
那如何得到false呢?
用严格比较,如下,
in_array(0, ['a', 'b', 'c'], true) // 返回false array_search(0, ['a', 'b', 'c'], true) // 返回false 0 === 'abc' // 返回false
强制做类型比较,这样就能拿到精确的结果。
3 false和null
那么,如果用false和
null与字符串数组比较会如何呢?
它们是不会转换成
int型的,所以结果是这样的:
in_array(null, ['a', 'b', 'c']) //返回false in_array(false, ['a', 'b', 'c']) //返回false
4 数组中有true
另外一个看起来比较奇怪的现象:in_array('a', [true, 'b', 'c']) // 返回bool(true),相当于数组里面有字符'a' array_search('a', [true, 'b', 'c']) // 返回int(0),相当于找到了字符'a'
这是为什么呢?
说起来也很好理解,松散比较下,任何
string都等于
true。
要想不相等,老办法,用严格比较。
参考资料:
Php, in_array, 0 value
PHP in_array() / array_search() odd behaviour
String conversion to
numbers
相关文章推荐
- php 使用in_array要注意问题
- PHP in_array效率问题
- php的in_array低性能问题
- php上传图片,解决in_array无效的问题,以及判断图片格式类型
- 2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
- 遭遇php的in_array低性能问题
- php in_array的性能问题,附加调试方法
- 遭遇php的in_array低性能问题
- PHP in_array不兼容问题
- PHP in_array的性能问题
- php in_array()存在的性能问题
- 【转载】PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- php中的一些不常见的问题foreach/in_array[开发篇]
- 2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
- 遭遇php的in_array低性能问题
- [php] in_array 判断问题
- 2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
- 部分PHP问题总结[转载]
- PHP IN_ARRAY 函数 使用需要注意的地方
- php5.3 的问题 “Assigning the return value of new by reference is deprecated in xxxx”