Búsqueda de matriz recursiva de PHP

Estoy usando la siguiente función para buscar a través de una matriz recursivamente:

function search2($array, $key){ if( array_key_exists($key, $array) ){ print("
----------------- FOUND {$key} with value: {$array[$key]}"); return array( $key => $array[$key] ); }else if( !array_key_exists($key, $array) ){ foreach ($array as $index => $subarray){ if( is_array($subarray) ){ print("
************* {$index} is an ARRAY"); print("
************* RE-SEACHING {$index} FOR : {$key}"); search2($subarray, $key); } } } }

Entonces, con la siguiente estructura de matriz:

 Array ( [personal] => Array ( [title] => [forename] => [surname] => [post_code] => [date_of_birth] => Array ( [month] => [day] => [year] => ) [email_address] => email1@test.org [confirm_email_address] => [mobile_telephone] => [home_telephone] => [work_telephone] => [are_you_entering_fundraising_in_a_team] => Array ( [yes] => 0 ) [how_many_places_would_you_like] => [team_name] => [names_of_team_members] => [how_did_you_hear_about_this_event] => [please_tell_us_] => [would_you_be_happy_for_publicity] => [is_this_the_first_time_you_have_taken_part_in_or_attended_this_event] => Array ( [yes] => 0 ) [do_you_have_a_special_reason_for_taking_part_in_or_attending_this_event] => [what_are_your_plans_for_raising_the_minimum_sponsorship_amount___please_be_as_detailed_as_possible] => [number_of_tickets_required] => 1 ) ) 

Mi función seguirá llamándose hasta que encuentre un índice que estoy buscando. Si estuviera buscando email_address , la primera parte de la sentencia if debería devolver el valor de ese índice si esa clave de matriz existe, de lo contrario entra en modo recursivo en la segunda parte del código.

El problema es que el código parece funcionar porque obtengo mi statement de impresión “encontrada” como la siguiente:

 print("
----------------- FOUND {$key} with value: {$array[$key]}");

sin embargo, espero que la statement de devolución haga lo que se supone que debe hacer, pero no obtengo ningún resultado en el momento de mi llamada de función.

¡Por favor ayuda!

Debes devolver el valor que encontraste, así que cambia:

 search2($subarray, $key); 

A:

 return search2($subarray, $key); 

También puede usar la función incorporada array_walk_recursive con callback incluida.

Use una función recursiva en matriz:

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

Esta función seguirá en bucle hasta que encuentre la clave que está buscando.