2012-09-25 183 views
2

我使用下面的函數通過數組遞歸搜索:PHP遞歸陣列搜索

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] => [email protected] 
      [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語句做什麼它應該,但我得到在我的函數調用點沒有輸出。

請幫忙!

回答

2

你必須返回你發現的價值,所以改變:

search2($subarray, $key); 

要:

return search2($subarray, $key); 
+0

非常感謝。我知道我忽略了一些重要的東西 – sisko

4

使用陣列功能遞歸:

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

此功能將繼續循環,直到找到您要找的密鑰。

+0

這個函數只給出一個值。如何獲得多個值。我用return $ key替換了return true。 –