У меня есть массив в массиве.
$a = array ( 0 => array ( 'value' => 'America', ), 1 => array ( 'value' => 'England', ), )
Как я проверяю, существует ли 'Америка' в массиве? Американский массив мог быть любым ключом, и могло быть любое количество подмассивов, таким образом, обобщенное решение.
Наблюдение php руководства, я вижу in_array, но который только работает на верхний слой. так что-то как in_array("America", $a)
не работал бы.
Спасибо.
Общее решение:
function deep_in_array($needle, $haystack) {
if(in_array($needle, $haystack)) {
return true;
}
foreach($haystack as $element) {
if(is_array($element) && deep_in_array($needle, $element))
return true;
}
return false;
}
Причина, по которой Я решил использовать in_array
и цикл: Прежде чем я исследую более глубокие уровни структуры массива, я убеждаюсь, что искомое значение не находится на текущем уровне. Таким образом, я надеюсь, что код будет быстрее, чем выполнение какого-либо метода поиска в глубину .
Конечно, если ваш массив всегда двумерный, и вы хотите искать только в таких массивах, это будет быстрее:
function in_2d_array($needle, $haystack) {
foreach($haystack as $element) {
if(in_array($needle, $element))
return true;
}
return false;
}
PHP не имеет встроенной функции array_search_recursive ()
, но вы можете определить ее:
function array_search_recursive($needle, $haystack) {
foreach ($haystack as $value) {
if (is_array($value) && array_search_recursive($needle, $value)) return true;
else if ($value == $needle) return true;
}
return false;
}
Непроверено, но вы поняли идею.