Voilà ma fonction récursive:Quel est le problème avec cette fonction récursive?
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;
}
}
Le problème est qu'il fait le même appel deux fois. Donc, cela est le résultat de l'exécution du code:
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);
Là où je doit seulement voir
get_ancestors(8);
get_ancestors(1);
get_ancestors(2);
get_ancestors(4);
get_ancestors(5);
get_ancestors(3);
get_ancestors(6);
Qu'est-ce qui ne va pas?
Merci.
Vous ne devriez probablement pas déclarer votre variable $ descendants comme globale, sinon elle ne sera jamais "effacée". –
Votre méthode 'get_ancestors()' semble retourner des descendants à la place des ancêtres, votre méthode 'get_ancestors()' ne devrait-elle pas avoir un autre nom, comme 'get_childs()'? – BlackCharly
C'est correct. J'ai l'intention de renommer la fonction bientôt :) – oaziz