PHP array_intersect没有任何严格类型检查选项,因为他们已经in_array
$array1 = array(true,2);
$array2 = array(1, 2, 3, 4, 5, 6);
var_dump(array_intersect($array1, $array2));
结果是:
array(2) {
[0] => bool(true)
[1] => int(2)
}
预期结果
array(1) {
[0] => int(2)
}
我错过了什么吗?
问题与PHP array_intersect() - how does it handle different types?
重复答案 0 :(得分:3)
PHP不是一种强类型语言,只要它涉及任何非假的,是真的,并且将在布尔运算中进行评估。 您可以在PHP手册http://php.net/manual/en/language.types.boolean.php
上获得有关此内容的更多信息但是,PHP确实提供了使用->addSelect('
CASE
WHEN t.loquage = :show_first THEN 1
ELSE 2
END AS HIDDEN loquer
')
->setParameters(array(
'show_first'=> 'oui',
严格检查类型的功能,正如您所说===
不使用此功能但可以使用array_intersect
来定义您自己的类型回调函数,用于比较值。
http://php.net/manual/en/function.array-uintersect.php
答案 1 :(得分:0)
如果你想要严格的array_intersect,你可以编写自己的方法,如下所示:
<?php
public function array_intersect_strict(array $array1, array $array2) {
return array_filter($array1, function ($value) use ($array2) {
return in_array($value, $array2, true);
});
}