$ a =(true === !! array_intersect(['1'],[3,2,1]))有什么区别?并检查in_array

时间:2019-09-10 06:53:40

标签: php arrays logic

何时使用此功能:-

$a = (true === !!array_intersect(['1'], [3, 2, 1]));

以及何时使用此

$b = in_array('1', [3,2,1]);

两者返回相同。

4 个答案:

答案 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)

array_intersect 版本相比,

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