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....

我正在使用这个函数来搜索值并返回它的键。如果未找到该值,则将值减一并再次搜索。

$search 是 md 数组

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

例如,$score 的值为 0f 24

注意:在整个数组中没有值为 24 的 SoG

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

不会回显递归找到的值。

4

2 回答 2

2

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

if ($found == false){
    $new_score = $score - 1;
    return find_percentile($search, $type, $new_score);//<- here
}
于 2013-08-01T17:35:51.943 回答
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;
}
于 2013-08-01T17:35:29.720 回答