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);
        });
    }
Другие вопросы по тегам