2013-08-01 118 views
1

當返回值我有一個多維數組搜索:遞歸函數 - 幫助調用函數

> Array (
>  [91] => Array 
>   (
>    [FoSW] => 117 
>    [DfLR] => 107 
>    [FoA] => 0 
>    [SoG] => 116 
>    [RST] => 38 
>    [SSW] => 0 
>    [total] => 458 
>  ) 
> 
>  [92] => Array 
>   (
>    [FoSW] => 118 
>    [DfLR] => 0 
>    [FoA] => 58 
>    [SoG] => 0 
>    [RST] => 0 
>    [SSW] => 40 
>    [total] => 463 
>  ) //etc.... 

我使用這個功能,搜索值,並返回其關鍵。如果未找到該值,則將值減1並再次搜索。

$搜索是MD數組

$型將是太陽級例如

$得分將是例如值0F 24(在MD陣列的所述第二電平的鍵)

注:整個陣列的位置,有24

function find_percentile($search, $type, $score){ 

    foreach($search as $key=>$val){ 

     if ($val[$type]== $score){ 
      return $key; 
      $found = true; 
     } 
     else { 
      $found = false; 
     } 
    } 
    if ($found == false){ 
     $new_score = $score - 1; 
     find_percentile($search, $type, $new_score); 
    } 
} 

值沒有太陽級,如果我從呼應foreach循環最終將回聲出$關鍵的遞歸找到鑰匙。

但是當我用該函數構建一個單獨的數組或回顯該函數時,它不會獲得遞歸找到的鍵。

$perc_array[$key] = find_percentile($percentiles, $key, $val); 

這將只附加匹配的值。遞歸發現的值不會在這個數組中。

echo find_percentile($percentiles, $key, $val); 

不會回顯遞歸發現的值。

+0

你爲什麼不只是使用array_search()? – XaxD

+0

如果你使用array_search,FoA和SoG的值可能是24 –

+0

,你可以'array_search($ score,$ search)',你不需要做任何遞歸......你可以遍歷每個第二維.. – XaxD

回答

2

你忘了返回值,該函數返回:

if ($found == false){ 
    $new_score = $score - 1; 
    return find_percentile($search, $type, $new_score);//<- here 
} 
+0

REALLY ???你現在沒有想法如何解決我的問題。但是,我認爲它會再次調用該函數,直到在if語句中返回找到的值...我有點困惑。 –

+0

@SmithSmithy「我認爲它會再次調用該函數,直到在if語句中返回找到的值」 - 它會調用該函數,但它的值不會被返回。試着模仿電腦的工作方式,仔細寫下紙上的所有步驟。 – user4035

0
function find_percentile($search, $type, $score){ 
    $max = null; 
    $where = 0; 
    foreach($search as $key=>$val){ 
     if ($val[$type]== $score){ 
       return $key; 
     } else if($val[$type]>$max && $val[$type] < $score) { 
       $where = $key; 
       $max = $val[$type]; 
     } 
    } 
    return $where; 
}