У меня есть массив внутри массива.
$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