这是我的递归函数:
function get_descendants($category_id)
{
global $descendants;
$categories = get_ancestors($category_id);
echo "get_ancestors($category_id);<br>";
// print_r($categories);exit;
if (!is_array($categories))
return;
foreach ($categories as $category)
{
$descendants[] = $category['id'];
// Look for other leafs
get_descendants($category['id']);
}
return $descendants;
}
function get_ancestors($parent_id)
{
global $db, $locale;
$result = $db->query("
SELECT ...
AND parent_id = $parent_id
");
$categories = $result->fetch_all(MYSQLI_ASSOC);
if ($result->num_rows > 0)
{
foreach ($categories as $category)
$data[] = $category;
return $data;
}
}
问题是两次同一个电话。所以这是运行代码的结果:
get_ancestors(8);
get_ancestors(1);
get_ancestors(2);
get_ancestors(4);
get_ancestors(5);
get_ancestors(3);
get_ancestors(6);
get_ancestors(8);
get_ancestors(1);
get_ancestors(2);
get_ancestors(4);
get_ancestors(5);
get_ancestors(3);
get_ancestors(6);
我应该只看到:
get_ancestors(8);
get_ancestors(1);
get_ancestors(2);
get_ancestors(4);
get_ancestors(5);
get_ancestors(3);
get_ancestors(6);
怎么了?
感谢。
答案 0 :(得分:2)
问题是您不希望$descendants
成为global
。
您正在所有递归调用中共享一个变量。对于你用来纠正的逻辑,它确实需要是本地的。
而不是global $descendants;
做$descendants = array();
。