php中in_array函数的坑

由于PHP是弱类型语言,所以有自动类型转换

例子

 1 $array = [0, 1, 2, ‘3‘];
 2
 3 var_dump(in_array(‘abc‘, $array)); //true
 4 var_dump(in_array(‘1ac‘, $array)); //true
 5 // 以上自动转换 abc -> 0, 1ac -> 1
 6 // 所以判断都是true
 7
 8 // 类似的还有
 9
10 $a = null;
11 $b = false;
12 echo $a == $b; //true
13
14 $c = "";
15 $d = 0;
16 echo $c == $d; //true
17
18 // 所有由此,有些重要的地方要使用 === 全等于来判断(类型和值都相等)

所以使用的时候一定要注意对值的判断是否正确,

如果确认函数的返回值一定是bool 那么尽量使用 === 全等于

原文地址:https://www.cnblogs.com/dishiao/p/12052915.html

时间: 2024-10-13 16:09:29

php中in_array函数的坑的相关文章

PHP5.3中 in_array()的一个坑

因排查问题,发现目前生产环境的PHP版本5.3中有这个问题: //php5.3 echo PHP_INT_MAX; $str = "114100007160061630632"; $arr = array("114100007160061630631"); var_dump(in_array($str,$arr)); echo 'PHP:' .phpversion(); exit; 对于纯数字的非严格比较,因超出Int最大值,5.3中给出的是结果是 true. 5.

php编程中如何避免调用in_array()函数出错问题

php开发过程中,经常会遇到判断一维数组中是否含有某个元素,这是会用到in_array();由于php是弱类型的语言,所以不小心的话,也会踩到"坑".(注:这里测试用到的php版本是5.6.)那么具体该如何注意呢?下面就来跟大家分享一些实用经验. 一.前方有坑 直接上代码: $arr = ['php在路上',1]; echo in_array(true,$arr) ? 1 : 0; echo in_array(0,$arr) ? 1 : 0; 结果: 11 二.为啥有坑 其实,从底层源

iOS开发中遇到过的坑

iOS开发中遇到过的坑 前言 做iOS开发这么长时间以来,遇到过不少难题,也踩过不少坑,本来没想过要写这篇文章,但是鉴于以下三点,笔者决定对遇到过的并且还能回忆起来的问题做个记录. 每次问题解决后,满满的成就感,但是当下一次再遇到时,又是一脸懵逼.这个问题我好像见过,但就是不记得怎么解决,记录下来方便以后查阅. 每次面试的时候,面试官总会问我,你在开发中遇到过哪些问题,怎么解决的?问题嘛,挺多的,但是你要我叙述嘛,我......我......我居然一时想不起来,迷之尴尬????(面试官当时想法:

php -- in_array函数

in_array    检查数组中是否存在某个值 说明 bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较. 参数 needle  待搜索的值. 如果 needle 是字符串,则比较是区分大小写的. haystack 这个数组. strict 如果第三个参数 strict 的值为 TRUE 则 in_arra

转 PHP in_array() 函数

实例 在数组中搜索值 "Glenn" ,并输出一些文本: <?php $people = array("Bill", "Steve", "Mark", "David"); if (in_array("Mark", $people)) { echo "匹配已找到"; } else { echo "匹配未找到"; } ?> 运行实例 定义和

使用ffmpeg视频编码过程中踩的一个坑

今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,很多时候一旦思维定势真的挺难突破的.下面是不正确的编码结果: 使用ffmpeg做视频编码过程中,首先要新建数据帧,并为数据帧分配相应内存,以便于保存图像数据,为数据帧分配内存需要用到av_image_alloc()这个函数,该函数将根据传入的图像宽.高.图像格式.数据对齐基数等参数进行内存分配. 这其中有一个参数可能会让人迷惑,那就是数据对齐基数这个参数该设置多少?顺便说说为什么要数据对齐,之所以要对齐,主要

javascript版in_array函数用法举例

javascript版in_array函数,用于判断数组中是否存在特定值. 判断一个字符串或者数字是否在数组内,很多程序语言都有这样一样专门的函数,比如PHP的in_array().那么JS有木有呢,很遗憾,JS木有这样的函数,于是想到伟大的JQ是否封装了这个函数,找到了API,JQ的确封装了这个函数jQuery.inArray( value, array ) 搜索数组中指定值并返回它的索引(如果没有找到则返回-1).value要搜索的值.array一个数组,通过它来搜索.当然,处于学习,自己也

Cocos2d-x中关于lua的坑

上周在项目开发中遇到一个奇怪的问题,某个c++模块解压完的字节流数据传递给lua后,lua在做基于字节流的反序列化时始终出错,刚开始以为是不是c++模块读取出来的字节流有问题,但是debug发现,c++拿到的字节流确实是正确的,于是跑到lua的接口中打印了字节流的内容和长度发现,在某些情况下C++中打印出来的字节流和lua拿到的字节流的长度不等,突然想起可能是lua和C++对string的支持不同导致的.因为C++中没有字节这个类型,所以存储字节流就一般存储到以char类型结构为基础类型的数组或

JavaScript中this的一些坑

我们经常在回调函数里面会遇到一些坑: var obj = { name: 'qiutc', foo: function() { console.log(this); }, foo2: function() { console.log(this); setTimeout(this.foo, 1000); } } obj.foo2(); 执行这段代码我们会发现两次打印出来的 this 是不一样的: 第一次是 foo2 中直接打印 this,这里指向 obj 这个对象,我们毋庸置疑: 但是在 setT