$a = (true === !!array_intersect(['1'],[3,2,1])); 之间有啥区别?并检查 in_array
Posted
技术标签:
【中文标题】$a = (true === !!array_intersect([\'1\'],[3,2,1])); 之间有啥区别?并检查 in_array【英文标题】:whats the difference between $a = (true === !!array_intersect(['1'],[3,2,1])); and checking with in_array$a = (true === !!array_intersect(['1'],[3,2,1])); 之间有什么区别?并检查 in_array 【发布时间】:2019-09-10 06:53:40 【问题描述】:何时使用:-
$a = (true === !!array_intersect(['1'], [3, 2, 1]));
以及何时使用它
$b = in_array('1', [3,2,1]);
两者返回相同。
【问题讨论】:
其实这是正常的。因为如果有相交,array_intersect 返回一个值。根据您的代码,该值为 1。该值为true
as 逻辑。所以,你的代码是这样的:!!true
。结果,true
。 in_array 方法直接返回布尔值。因此,这两个代码为您的代码返回相同的值。
为什么要这么复杂? $b = in_array('1',[3,2,1]);
- 简单易读。
为什么这个问题被否决了?安静有趣
【参考方案1】:
array_intersect() 返回两个数组的共同元素。在您的代码array_intersect(['1'], [3,2,1])
中,返回[1]
,当使用!!
时,它的值为真。因为:
![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)
根据数组 $arr
中是否存在 $elm
返回一个布尔值(真或假)
由于您的代码的两个部分在逻辑上都得到true
,这就是为什么您得到相同的值true
。
【讨论】:
【参考方案2】:in_array 与 array_intersect 版本相比更具可读性。但是,与 in_array 相比,array_intersect 是很多 faster。因此,要回答您的问题,请仅在处理的数据集大到足以引发性能问题时才使用 array_intersect。否则,坚持 in_array 将使下一个开发人员的生活更轻松。干杯
【讨论】:
【参考方案3】:两者是不同的东西。
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,或者如果您想获取 匹配两个数组的值,然后你可以使用 array_intersect。
【讨论】:
【参考方案4】:虽然不太一样。来自docs:
注意:当且仅当 (string) $elem1 === (string) $elem2 时,才认为两个元素相等。换句话说:当字符串表示相同时。
因此,当使用array_intersect()
时,您将始终得到true
,但这只是因为您的第二个数组元素“1”的字符串表示与您与之相交的数组的字符串表示相匹配。使用in_array()
,您可以有第三个参数strict
,它是一个布尔值,用于指示是否还使用类型检查(see here)。因此,在您的第二个示例中,您还可以选择检查类型是否匹配,这是更细粒度的。
就个人而言,无论如何我都会使用第二个选项,只是为了它的可读性。
如果您想在数组中查找元素并获取子数组,那么您应该选择array_intersect()
,出于性能原因,请参阅accepted answer to this post
【讨论】:
以上是关于$a = (true === !!array_intersect(['1'],[3,2,1])); 之间有啥区别?并检查 in_array的主要内容,如果未能解决你的问题,请参考以下文章
js中a + 1 < a等于true,(a ==1 && a== 2 && a==3) 等于 true如何实现
c++ 中 BOOL与bool TRUE与true FALSE与false 区别 (转载)
为啥两个向量的大小<bool> bVec = true,false,true,false,true;向量<char> cVec = 'a', 'b', 'c', 'd',