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语句中返回找到的值”-它会调用函数,但不会返回它的值。试着模仿计算机的工作方式,仔细地将所有步骤写在纸上。