【发布时间】:2013-08-01 17:11:58
【问题描述】:
我有一个多维数组要搜索:
> 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);
不会回显递归找到的值。
【问题讨论】:
-
为什么不直接使用array_search()?
-
FoA 和 SoG 的值可能为 24
-
如果你使用array_search,你可以
array_search($score, $search)并且你不需要做任何递归..你可以遍历每个二维.. -
我正在搜索所有 100 个主密钥。每个主密钥的每个密钥子集都重复。 [100][sog] = 1, [99][sog] = 2 等等...我正在寻找哪个主密钥具有 [sog]=24,如果没有找到,请转到 [sog]=23 等等.. .
标签: php recursion multidimensional-array