何时使用此功能:-
$a = (true === !!array_intersect(['1'], [3, 2, 1]));
以及何时使用此
$b = in_array('1', [3,2,1]);
两者返回相同。
答案 0 :(得分:2)
array_intersect()从两个数组中返回公共元素。在您的代码array_intersect(['1'], [3,2,1])
中返回[1]
,使用!!
时其值为true。因为:
![1]
是false
!false
得到true
最后,(true === !!array_intersect(['1'], [3,2,1]))
返回true
,因为两个站点都是true
。注意:===
用于严格检查(带有类型)。这意味着$a
的值为true
。
第二部分代码:
in_array()用于检查天气元素是否存在于数组中。在您的代码中in_array('1',[3,2,1]);
是true
,因为1
存在于数组[3, 2, 1]
array_intersect()
和in_array()
之间的区别是:
array_intersect($arr1, $arr2)
返回一个在数组$arr1
和$arr2
中都通用的数组in_array($elm, $arr)
根据数组$elm
中$arr
的存在返回布尔值(是或否)由于代码的两个部分都在逻辑上true
,这就是为什么您获得相同的值true
的原因。
答案 1 :(得分:0)
in_array 更具可读性。但是,与 in_array 相比, array_intersect 要多faster。因此,要回答您的问题,请仅在处理足够大的数据集以引起性能问题时使用 array_intersect 。否则,坚持使用 in_array 将使下一个开发人员的生活变得更轻松。干杯
答案 2 :(得分:0)
两者都是不同的东西。
array_intersect比较两个数组的值,并返回匹配项:
$a1=array(0=>"red",1=>"green",2=>"blue",3=>"yellow");
$a2=array(0=>"red",1=>"green",2=>"blue");
$result=array_intersect($a1,$a2);
print_r($result);
输出将为
数组([0] =>红色[1] =>绿色[2] =>蓝色
in_array用于检查该值是否存在。
$a1=array(0=>"red",1=>"green",2=>"blue",3=>"yellow");
in_array('red',$a); //true
in_array('black',$a); //false
现在,如果要检查数组中的值是否存在,则可以使用 in_array ,它将返回true或false,或者如果要获取<来自两个数组的strong> matches 值,则可以使用 array_intersect 。
答案 3 :(得分:0)
虽然不太一样。来自docs:
注意:当且仅当(字符串)$ elem1 ===(字符串)$ elem2时,两个元素才被视为相等。换句话说:当字符串表示相同时。
因此,在使用array_intersect()
时,总会得到true
,但这仅是因为第二个数组元素“ 1”的字符串表示形式与与其相交的数组的字符串表示形式匹配。使用in_array()
,可以有第三个参数strict
,它是一个布尔值,指示是否还使用类型检查(see here)。因此,在第二个示例中,您还可以选择检查类型是否匹配,这更加细粒度。
就个人而言,出于可读性考虑,我都会使用第二个选项。
如果要在数组中查找元素并获取子数组,出于性能原因,应选择array_intersect()
,请参见accepted answer to this post