php in_array比较原理和类型比较问题
in_array 是PHP 的检查数组中是否存在某个值 的函数,里面有三个参数 bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
mixed:类型 支持做种复合类型,参数传入也是可以是int,str,float,array
haystack: 源数组,查找的数组。
strict : 参数接受两个 true 和false 两个参数.该参数主要检查 $needle 和$haystack 中的value 的类型是否一致。
有趣的问题:
var_dump(in_array('b', array('a'=>true)));
返回值:true
var_dump(in_array('01',array('1')));
返回值也是:true
其实上面的问题不难接受:
第一种、var_dump(in_array('b', array('a'=>true))) 这个比较是比较 'b'==true 这样的 类型比较 b 是变量或者一个字符串string 和bool 类型比较.结果是true
具体的可以看官方的:http://php.net/manual/zh/types.comparisons.php 但是如果 var_dump('b'===true); 结果可能就不一样了返回值:false 就是类型比较的问题
第二种、其实也一样都是在类型判断的问题。大家可以在开发环境中试试。
var_dump('01'==1); 返回值:true
var_dump('01'===1);返回值:false
大家有心情可以看下in_array 源码.https://github.com/php/php-src/blob/master/ext/standard/array.c
源码中有php_search_array 的源码,当使用非严格模式时,调用 fast_equal_check_function 函数。
所以如果在使用in_array 查找的数据,如果对类型要求严格,请这样使用:var_dump(in_array('01',array('1'),true)); strict :传递true .
php in_array比较原理和类型比较问题的更多相关文章
- php-数据库-分页类-上传类
config.ini.php <?php header("content-type:text/html;charset=utf-8"); //项目的根目录 define(&q ...
- php上传(二)
上传的主体页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
- ArrayList 实现删除重复元素(元素为对象类型)
package 集合; import java.util.ArrayList;import java.util.Iterator; /* * 删除集合中的重复的元素(元素是对象形式的) * * Li ...
- PHP弱类型需要特别注意的问题
下面介绍的问题都已验证, 总结:字符数据比较==不比较类型,会将字符转数据,字符转数字(转换直到遇到一个非数字的字符.即使出现无法转换的字符串,intval()不会报错而是返回0).0e,0x开头的字 ...
- in_array支持第三个参数,强制对数据类型检测
in_array函数是判断数据中是否存在指定的内容了,对于这个函数用法非常的简单但在使用过程中会我发现有一些问题. 先介绍一下需求背景: 发票方式: 0=捐赠(不要问我为什么,历史原因) 1=对中寄送 ...
- in_array 查询数组中是否存在某个值
(PHP 4, PHP 5) in_array — 检查数组中是否存在某个值 说明 bool in_array ( mixed $needle , array $haystack [, bool $s ...
- (实用篇)php数组查找函数in_array()、array_search()、array_key_exists()使用
php在数组中查找指定值是否存在的方法有很多,记得很久以前我一直都是傻傻的用foreach循环来查找的,下面我主要分享一下用php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in ...
- PHP in_array效率问题
in_array的效率问题就是在比较上,默认要比较的字符串转成整形,所以耗费时间.可以使用强制类型比较 in_array($x, $arr, TRUE);
随机推荐
- 解决android启动程序时,会出现一个短暂的白色空白界面的问题
在启动的activity定义style为透明就可以了(android:theme="@android:style/Theme.Translucent")
- loadrunner11有效的license
下载安装deletelicense.exe先1)退出程序,把下载文件中的lm70.dll和mlr5lprg.dll覆盖掉..\HP\LoadRunner\bin下的这两个文件 2)注意,win7的话一 ...
- MySQL 创建库
CREATE DATABASE IF NOT EXISTS database_name DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 这种创建方式能保证数 ...
- 服务器CPU使用率高的原因分析与解决办法
我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...
- evernote出现"Invalid username and/or password"的情况
evernote出现"Invalid username and/or password"的情况 evernote挺好用的,可是这几年用下来也遇到过狗血情况,几乎每次都是更新后出状况 ...
- Sea.js提供简单、极致的模块化开发体验
为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...
- [PWA] 0. Introduce to Offline First
Why offline first? Imagin you are visiting a website, it is fine if wifi connection is good. It migh ...
- linux 获取系统屏幕分辨率
在Windows下可以使用GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取. 在Linux下可以使用XDisplayWi ...
- visul svn+花生壳
1.服务器端 工具:visul svn+花生壳 花色壳:注册域名 visul svn:配置http://www.cnblogs.com/bluewelkin/p/3479105.html 外网访问,端 ...
- 用Wget进行下载
wget下载可以不用考虑资源的双向认证的问题,即 wget -N -S -O " + filePath + " " + urlStr + " --no-chec ...