我一直试图编写一个递归函数来给出给定元素的深度,但没有成功。我只是不太明白递归的含义。这就是我所拥有的,但它不能正常工作:
function getDepth($a, $e, $depth = 0) {
foreach ($a as $key => $val) {
if (is_array($val)) {
if ($key == $e) {
return $depth;
}
return getDepth($val, $e, $depth + 1);
}
else {
if ($val == $e) {
return $depth;
}
else {
return 1;
}
}
}
}
有人能帮我指出我做错了什么吗?提前谢谢你的帮助。
编辑:
@Brad@Amber@Viktor谢谢,但这也没用。这是我想要的…我有一个这样的数组:
[antonio] => Array
(
[ian] => Array
(
[molly] => Array
(
[blake] => blake
)
)
[shonda] => Array
(
[dana] => dana
[james] => james
)
[nels] => Array
(
[jason] => jason
[danny] => danny
)
[molly] => Array
(
[blake] => blake
)
[blake] => blake
[travis] => travis
)
这是一棵树,我希望能找到一个名字的深度。所以,我需要传个名字,布莱克说。然后我想遍历整棵树,随时跟踪布莱克在树上不同层次的深度(在本例中确实如此)。假设最上面的深度等级是0,那么布莱克在安东尼奥手下的等级是3,但是他在安东尼奥手下的等级是1,所以我想返回1。我必须遍历整个树(幸运的是,这个函数不会经常调用),以确保为给定的用户找到树中最浅的深度。再次感谢你的帮助。
最佳答案
基本上,为了正确地进行递归,如果你知道你的函数中有一个数组,那么在它上运行同样的函数。我们加上迄今为止最深的路径+1。最后,你得到了你想要的。
function getDepth($a) {
$max=0;
foreach ($a as $val) {
if (is_array($val)) {
$tmp_depth=getDepth($val);
if ($max<($tmp_depth)) {
$max=$tmp_depth;
}
}
}
return $max+1;
}
我还没有做过基准测试。毫无疑问,如果这很重要的话,速度可能会提高。
关于php - 用PHP计算关联数组中元素的深度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7718413/