php Проверка наличия значения в массиве массива

У меня есть массив внутри массива.

$a = array ( 0 => array ( 'value' => 'America', ), 1 => array ( 'value' => 'England', ), ) 

Как проверить, существует ли «Америка» в массиве? Массив America может быть любым ключом, и может быть любое количество подмассивов, поэтому, пожалуйста, обобщенное решение.

Глядя на руководство 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 и цикл: Прежде чем я исследую более глубокие уровни структуры массива, я уверен, что искомое значение не находится на текущем уровне. Таким образом, я надеюсь, что код будет быстрее, чем какой-то метод поиска по глубине .


Конечно, если ваш массив всегда 2-мерный, и вы хотите только искать в таких массивах, то это быстрее:

 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; } 

Непроверенный, но вы поняли эту идею.

 function search($a,$searchval){ //$a - array; $searchval - search value; if(is_array($a)) { foreach($a as $val){ if(is_array($val)) if(in_array($searchval,$val)) return true; } } else return false; } search($a, 'America'); //function call