【发布时间】:2010-06-02 18:23:56
【问题描述】:
我想创建一个函数,它从一个集合节点返回完整路径,返回到根值。我试图制作一个递归函数,但完全没有运气。什么是合适的方法来做到这一点?我假设递归函数是唯一的方法?
这是数组:
Array
(
[0] => Array
(
[id] => 1
[name] => Root category
[_parent] =>
)
[1] => Array
(
[id] => 2
[name] => Category 2
[_parent] => 1
)
[2] => Array
(
[id] => 3
[name] => Category 3
[_parent] => 1
)
[3] => Array
(
[id] => 4
[name] => Category 4
[_parent] => 3
)
)
我希望我的函数在获取节点 id#4 的完整路径时输出的结果:
Array
(
[0] => Array
(
[id] => 1
[name] => Root category
[_parent] =>
)
[1] => Array
(
[id] => 3
[name] => Category 3
[_parent] => 1
)
[2] => Array
(
[id] => 4
[name] => Category 4
[_parent] => 3
)
)
我递归技能的臭名昭著的例子:
function recursive ($id, $array) {
$innerarray = array();
foreach ($array as $k => $v) {
if ($v['id'] === $id) {
if ($v['_parent'] !== '') {
$innerarray[] = $v;
recursive($v['id'], $array);
}
}
}
return $innerarray;
}
【问题讨论】:
-
为什么不把你的代码贴出来让我们看看?也许你比你想象的更接近。
-
没有必要使用递归。将您的“foreach”搜索添加到我的以下代码中以搜索父 ID。如果你必须使用递归,你的代码的问题是你没有保留递归函数的返回值,你需要将它附加到你的 $innerarray