我有以下数组,想要找到最大值。其树形结构的深度。但我的代码返回12,当它应该是4 ...我不太擅长递归,所以这有点让我疯狂!
数组声明:
function plotTree($arr, $indent=0, $mother_run=true){
global $ini_array;
global $depth;
global $maxDepth;
if ($mother_run) {
// the beginning of plotTree. We're at rootlevel
echo "start\n";
}
foreach ($arr as $key => $value) {
if (is_array($value)) {
foreach ($value as $subKey => $subValue) {
if(in_array($subValue.".item", array_keys($ini_array['relation']))) {
$depth +=1;
plotTree($ini_array['relation'][$subValue.".item"],0,false);
}
}
$maxDepth = $maxDepth < $depth ? $depth : $maxDepth;
}
}
if ($mother_run) {
echo "end\n";
}
}
递归函数:
function updateFrame(){
$("#myDiv").animate({left: '+=1px'}, 10, function(){
window.requestAnimationFrame(updateFrame);
});
}
updateFrame();
[更新}我不想查找尺寸数量。在上面的示例中,树结构如下:parent =&gt; cs =&gt; business =&gt;展
答案 0 :(得分:0)
所以我看到你正在尝试根据关系来衡量深度&#39;在一个平面阵列而不是树的实际深度。
所以,我已经能够提出以下解释:
<?php
function getMaxDepth(array $arr, array $relations = array()) {
if (empty($relations)) {
return array_reduce($arr, function ($result, $elem) use ($arr) {
return max($result, getMaxDepth($elem, $arr));
});
}
// Return 1 + the depth of the deepest nested tree
return 1 + array_reduce($arr, function ($max, $elem) use ($relations) {
// If the field is not related to another field return the current max
if (!in_array($elem . '.item', array_keys($relations))) {
return $max;
}
// Return maximum of current maximum and the depth of related tree
return max($max, getMaxDepth($relations[$elem . '.item'], $relations));
}, 0);
}
像这样使用:
getMaxDepth($yourArray['relation']); // returns 4
首先,您应该避免使用全局变量或静态变量,尤其是在处理递归时。相反,我们希望通过将它作为函数参数传递来保存我们需要的所有内容。
第一个if
语句将getMaxDepth()
分别应用于每个子树,因为我们希望确保覆盖所有子树。
然后我们简单地返回最深层嵌套的深度&#39;树,如果有一个或0,并为当前元素添加一个。
希望将来能帮到你。