为什么in_array(0, ['a', 'b', 'c'])返回true
时间:2022-05-03
本文章向大家介绍为什么in_array(0, ['a', 'b', 'c'])返回true,主要内容包括1 类型转换、2 严格比较、3 false和null、4 数组中有true、Post navigati、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
在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
Post navigati
- Linux 基础:文件查找 find
- PHP 闭包(Closure)初探
- linux服务器apache服务配置wordpress伪静态
- 用 Python 实现一个大数据搜索引擎
- 关于 Java 你不知道的 10 件事
- 如何在一周之内获得GitHub stars 3500+ —为什么对于程序员这是如此的重要
- 程序员做完整性检查的命令行工具
- Spring MVC工作原理
- PHP 中被忽略的性能优化利器:生成器
- 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
- 从放弃迅雷到自己开发下载工具
- SSH 登录流程分析
- 从 0 到 1 优雅的实现PHP多进程管理
- 爬虫抓取的门道——来看这篇
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- FreshRSS:开源免费的RSS阅读器
- 使用snap快速安装RocketChat你的聊天服务器
- CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能
- Baidu Sitemap Generator在PHP7无法生成XML的解决方法
- MFC实现的Socket通信
- 128-在线翻译
- C语言CGI编程二 - 编写cmd后门
- android 获取视频第一帧作为缩略图的方法
- Flutter利用注解生成可自定义的路由的实现
- Android实现随意拖动View效果的实例代码
- Kotlin的枚举与异常示例详解
- Android自定义View的使用及其原理知识点总结
- Android中Window的管理深入讲解
- Android UI绘制流程及原理详解
- flutter 轮播图动态加载网络图片的方法