Я читаю это вопрос и он ответил на часть моего вопроса, но независимо от того, что я делаю, чтобы изменить функцию, я не получаю ожидаемых результатов.
Я хочу передать массив этой функции и проверить, существует ли значение этого массива в многомерном массиве. Как я могу изменить эту функцию, чтобы работать, если $needle
является array
?
//example data
$needle = array(
[0] => [email protected],
[1] => [email protected],
[2] => [email protected]
)
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;
}
Проверить, если 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
,
Других решений пока нет …