我有一个多维数组要搜索:
> 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);
不会回显递归找到的值。
答案 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;
}