поиск с помощью in_array для (null, false)

Я пытаюсь проверить, если filter_var_array отфильтровал некоторые входные данные.
Согласно PHP документу filter_var_array вернуть false если фильтр не работает или null если переменная не установлена.

Я создал небольшой тест, чтобы проверить, как искать (null, false)
внутри массивов, и я получил некоторые странные результаты

$tmp = $tmp = array(null, 1, 'test', 100, false);
$arr = array(null, false);

$x = in_array(array_map('strtolower',$arr), array_map('strtolower', $tmp), true);
var_dump($x);

$x = in_array(array_map('strtolower', $tmp), array_map('strtolower',$arr), true);
var_dump($x);

выход:

boolean false

boolean false

Я делаю что-то неправильно?

РЕДАКТИРОВАТЬ:
Ответ дается в комментарии @sg.

Способ сделать это с помощью array_intersect,

$tmp = array(null, 1, 0, FALSE, 'test', NULL, 100, false);
$arr = array(null, false);

$x = array_intersect($tmp, $arr);
var_dump($x);

выход:

array (size=4)
0 => null
3 => boolean false
5 => null
7 => boolean false

важные заметки:
1. Если $ needle — это массив. in_array поиск совпадения с полным массивом
2. array_intersect строгий тип

0

Решение

Я делаю что-то неправильно?

Да:

  1. Вы рассматриваете null и false как строки, передавая их strtolower. Это не очень хорошая идея.

  2. in_array не работает так. На данный момент вы просите его найти массив, содержащий null и false внутри первого массива. Он не перебирает все значения в игле, ища каждое из них в отдельности. Попробуйте это, чтобы увидеть:

    $tmp = array(array(null, false), 1, 'test', 100, false);

    $arr = array(null, false);

    $x = in_array($arr, $tmp, true);

    var_dump($x);

    $x = in_array($tmp, $arr, true);

    var_dump($x);

  3. Ваше утверждение о возвращаемых значениях in_array неверно. in_array «Возвращает TRUE, если в массиве найдена игла, иначе FALSE.»

0

Другие решения

Других решений пока нет …