递归函数 - 帮助调用函数

问题描述:

当返回值我有一个多维数组搜索:递归函数 - 帮助调用函数

> 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

你忘了返回值,该函数返回:

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

REALLY ???你现在没有想法如何解决我的问题。但是,我认为它会再次调用该函数,直到在if语句中返回找到的值...我有点困惑。 –

+0

@SmithSmithy“我认为它会再次调用该函数,直到在if语句中返回找到的值” - 它会调用该函数,但它的值不会被返回。试着模仿电脑的工作方式,仔细写下纸上的所有步骤。 – user4035

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