Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 递归函数-调用函数时帮助返回值_Php_Recursion_Multidimensional Array - Fatal编程技术网

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

Php 递归函数-调用函数时帮助返回值,php,recursion,multidimensional-array,Php,Recursion,Multidimensional Array,我有一个多维数组要搜索: > Array ( > [91] => Array > ( > [FoSW] => 117 > [DfLR] => 107 > [FoA] => 0 > [SoG] => 116 > [RST] => 38 > [S

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

> 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

注意:在整个阵列中,没有值为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);
将不回显递归找到的值。

函数find\u百分位数($search,$type,$score){
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;
}
$max=null; $where=0; foreach($key=>$val搜索){ 如果($val[$type]==$score){ 返回$key; }否则如果($val[$type]>$max&&$val[$type]<$score){ $where=$key; $max=$val[$type]; } } 返回$where; }
您忘记返回函数返回的值:

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

return find_percentile($search,$type,$new_score);//为什么不使用array_search()?FoA和SoG的值可能是24如果使用array_search,您可以只使用
array_search($score,$search)
而且你不需要做任何递归..你只需迭代每个第二维度..我正在搜索所有100个主密钥。每个主密钥的每个子集都会重复。[100][sog]=1、[99][sog]=2等..我正在查找哪个主密钥的[sog]=24,如果没有找到,请转到[sog]=23等等……真的吗???你不知道我现在有多宽慰。但是,我以为它会再次调用函数,直到在if语句中返回找到的值……我有点困惑。@Smithy“我以为它会再次调用函数,直到在if语句中返回找到的值”-它会调用函数,但不会返回它的值。试着模仿计算机的工作方式,仔细地将所有步骤写在纸上。