Я использую следующую функцию для поиска по массиву рекурсивно:
function search2($array, $key){ if( array_key_exists($key, $array) ){ print("<br> ----------------- FOUND <u>{$key}</u> 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("<br> ************* <u>{$index}</u> is an ARRAY"); print("<br> ************* RE-SEACHING <u>{$index}</u> FOR : <u>{$key}</u>"); search2($subarray, $key); } } } }
Итак, со следующей структурой массива:
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 ) )
Моя функция будет продолжать называть себя, пока не найдет индекс, который я ищу. Если бы я искал email_address , первая часть оператора if должна возвращать значение этого индекса, если этот ключ массива существует, иначе он переходит в рекурсивный режим во второй части кода.
Проблема в том, что код, похоже, работает, потому что я получаю свой «найденный» вывод распечатки следующим образом:
print("<br> ----------------- FOUND <u>{$key}</u> with value: {$array[$key]}");
однако я ожидаю, что оператор return сделает то, что он должен, но я не получаю никакого вывода в точке вызова моей функции.
Пожалуйста помоги!
Вы должны вернуть найденное значение, поэтому измените:
search2($subarray, $key);
Для того, чтобы:
return search2($subarray, $key);
Также вы можете использовать встроенную функцию array_walk_recursive с включенным обратным вызовом.
Используйте рекурсивную функцию массива:
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; }
Эта функция будет продолжать цикл, пока не найдет ключ, который вы ищете.