php array_intersect со строгим типом
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() - как он обрабатывает различные типы?
2 ответа
PHP не является строго типизированным языком, поскольку он касается всего, что не является ложным, является истинным и будет оцениваться как таковое в логических операциях. Вы можете получить более подробную информацию об этом в руководстве по PHP http://php.net/manual/en/language.types.boolean.php
Тем не менее, PHP предоставляет функциональность для строгой проверки типов с ===
, как вы сказали array_intersect
не использует эту функцию, но можно использовать array_uintersect
определить вашу собственную функцию обратного вызова, которая будет сравнивать значения. http://php.net/manual/en/function.array-uintersect.php
Если вы хотите строгое 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);
});
}