Проверьте, существует ли значение массива в многомерном массиве

Я читаю это вопрос и он ответил на часть моего вопроса, но независимо от того, что я делаю, чтобы изменить функцию, я не получаю ожидаемых результатов.

Я хочу передать массив этой функции и проверить, существует ли значение этого массива в многомерном массиве. Как я могу изменить эту функцию, чтобы работать, если $needle является array?

//example data
$needle = array(
[0] => someemail@example.com,
[1] => anotheremail@example.com,
[2] => foo@bar.com
)

function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}

РЕДАКТИРОВАТЬ

Прочитав ответ, предоставленный TiMESPLiNTER, я обновил свою функцию следующим образом, и она отлично работает.

function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (is_array($needle) && is_array($item)) {
if(array_intersect($needle,$item)) {
return true;
}
}
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}

0

Решение

Проверить, если array_intersect() возвращает массив хотя бы с одним элементом. Если да, то одно из ваших значений в $needle массив содержится в $haystack массив.

Я закончил с этой функцией:

function in_array_r($needle, $haystack) {
$flatArray = array();

array_walk_recursive($haystack, function($val, $key) use (&$flatArray) {
$flatArray[] = $val;
});

return (count(array_intersect($needle, $flatArray)) > 0);
}

Вы можете расширить эту функцию, чтобы принимать многомерные массивы для обоих $needle а также $haystack,

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector