Hej!
Såhär är det:
Jag har ett vanligt enkelt kategorisystem i en databas där det finns tre kolumner, cid (category id), name och pcid (parent category id).
De som saknar föräldrar, dvs de noder som är högst upp i hierarkin har pcid = 0.
Följande kodsnutt gör precis det jag vill:
function findChildren ($carrier, $pcid, $level)
{
for ($i=0; $i<count($carrier); $i++)
{
if ($pcid==$carrier[$i]['pcid'])
{
for ($j=0; $j<=(($level+1)*2); $j++)
echo (" ");
echo ($carrier[$i]['name'] . " \n");
echo ("<br />");
findChildren($carrier,&$carrier[$i]['cid'], $level+1);
}
}
}
for ($i=0; $i<=$carriersize; $i++)
{
if ($carrier[$i][pcid]==0)
{
echo ($carrier[$i]['name'] ." \n");
echo ("<br />");
findChildren($carrier, &$carrier[$i]['cid'], 0);
}
}
Dock har jag brottats hela dagen med tanken över hur jag kan göra detta genom en iterativt istället för rekursivt. Jag hoppas koden är läsbar Enkelt sagt:
1. Koden hittar Föräldralösa-föräldrar.
2. Ett anrop görs till findChildren() och barnen hittas
3. När varje barn hittas, anropas findChildren() igen för att hitta eventuella barn
4. När eventuella barn hittas, anropas findChildren för de. osv osv osv, tills alla nivåer har gåtts igenom.
Går detta att göra iterativt på ett smidigt sätt?