在具体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官网上关于“String conversion to numbers”的说明: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() 函数检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE 。 语法: bool in_array( mixed needle, array array [, bool strict] ) ...$arr_a = array(a, b, c, 1); if(in_arra
3.17 为什么下面的代码总是给出0?double degC, degF; degC= 5.0 / 9 * (degF - 32); 40 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : b)= ...
A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为(C )两大类。【武汉交通科技大学 1996 一 、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、...
//设置指定位置为0或1,true表示1,false表示0,如果pos大于数组长度,则自动扩展 void set(size_t _Pos, bool _Val = true); //将位数组转换成整数,最低位放在[0]位置 //例如数组中存放的1011,则返回13,而...
例1 代码如下:/* * * 判断在数组中是否含有给定的一个变量值 * 参数: * needle:需要查询的值 * haystack:被查询的数组 * 在haystack中查询needle是否存在,如果找到返回true,否则返回false。 * 此函数只能对字符...
while lcm mod b>0 do inc(lcm,a); end; 3.素数的求法 A.小范围内判断一个数是否为质数: function prime (n: integer): Boolean; var I: integer; begin for I:=2 to trunc(sqrt(n)) do if n mod I=0 then ...
$a xor $b :异或 (当$a或$b为true时为true,两者一样时为false) ! $a :非 比较运算符有: $a == $b :相等 $a != $b :不等 $a $b :小于 $a $b :小于等于 $a > $b :大于 $a >= $b :大于等于 与C一样PHP也有...
Number or Array easeIn(t, value1, value2) {t 是一个数, and value1 and value2 是数或数组} 返回 值与ease相似, 但只在切入点value1 的速率为0,靠近value2 一边是线性的。 Number or Array easeIn(t, tMin, ...
///如果程序是第一次运行返回True,否则返回False publicstaticbool IsFirst(string appId) { bool ret=false; if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero) { CreateMutex(IntPtr.Zero,0,appId); ...
答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 34.面向对象的语言具有________性...
正切 返回 e 的指定次幂 对数 数字 x 的 y 次幂 返回较大者 第3页 C#(WINFORM)学习 Math.Min(x,y) 返回较小者 枚举型 一般为字符串,可以定义带数字的枚举型,示例为: enum Color { Red=1, Blue=2, Green=3 } ...
// ad function dy(code) ...document.writeln ('<iframe width="120" height="24" frameborder="0" allowtransparency="true" marginwidth="0" marginheight="0" scrolling="no" border="0" src=...
Program, -page, _lock, test2, 3in1, @mail, A_B_C_D 解: Program, _lock, test2, A_B_C_D是合法的标识符,其它的不是。 2-3 例2.1中每条语句的作用是什么? #include void main(void) { cout!\n"; ...
92、一般情况下,关系数据模型与对象模型之间有哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory的说法哪些正确?(B,C) 21 94、元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性...
92、一般情况下,关系数据模型与对象模型之间有哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory的说法哪些正确?(B,C) 21 94、元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性...
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...
相应位都为1 或两个二进制数的相应位都为0,则返回0;如果两个二进制数的相应位其中一个为1 一个为0, 则返回1。 现在来了解一下使用“异或”加密或解密的执行过程,数值23 转换为二进制为10111,加密数字的数值15 ...
<input type=text onkeypress="return event.keyCode>=48&&event.keyCode||(this.value.indexOf(".")<0?event.keyCode==46:false)" onpaste="return !clipboardData.getData("text").match(/D/)" ondragenter=...
其中a为1至9之中的一个数,项数也要可以指定。 import java.util.Scanner; class Multinomial{ public static void main(String[] args){ int a; //定义输入的 a int howMany; //定义最后的一项有多少个数字 ...
W3C组织正在研究一种名为RDF(Resource Description Framework)的metadata处理方法,可以自动交换信息,W3C宣称,使用RDF配合数字签名,将使网络中存在"真实可信"的电子商务。 六.显示 单独用XMl不能显示页面,...