递归函数 - 帮助调用函数时返回值

时间:2013-08-01 17:11:58

标签: php recursion multidimensional-array

我有一个多维数组要搜索:

> 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并再次搜索。

$ search是md数组

$ type将是SoG例如(md数组的第二级中的键)

$ score将是0f 24的值,例如

注意:在整个阵列中没有SoG值为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循环中回显$ key,它最终会回显出递归找到的密钥。

但是当我使用函数构建一个单独的数组或者回显函数时,它不会获得递归所找到的键。

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

这只会附加匹配的值。递归找到的值不在此数组中。

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

不会回显递归找到的值。

2 个答案:

答案 0 :(得分:2)

您忘记返回函数返回的值:

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

答案 1 :(得分: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;
}