in_array的第3个参数
使用 in_array() 判断数组中是否有某个值,如果省略了第3个参数,有时得到的结果可能毫无意义,例如下面这段代码
<?php
$arr = [true, false];
$f = in_array('Hello', $arr);
if($f)
echo 'in array';
else
echo 'not found';
//结果输出 in array
改成in_array('Hello', $arr, true)
即可解决这个问题,可以点此链接在 php 沙盒中执行代码
在 JS 中不存在这个问题,例如用 indexOf() 函数改写一下就是这样的
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
没加true 是 ==
没加true 是 ==
还有一个
array_search()
细思极恐 :see_no_evil:
我个人觉得还是匹配的类型转换的机制有问题,越简单的数据类型,转换的时候,优先级越高,我感觉应该反过来,比如bool和字符串,转字符串,数字和bool,转数字,
库函数strtol_internal 的调用非常之频繁,这个库函数strtol_internal 是原来是 strtol 的别名,简单的说就是把字符串转换成长整形,可以推测 PHP 引擎已经检测到这是一个字符串型的数字,所以期望将他们转换成长整型来比较。避免使用 in_array 判断大型数组时间复杂度是 O(n)