Autor Zpráva
H13
Profil
Ahoj, potřeboval bych poradit s rekurzivní funkcí. Mám rekurzivní fukci, která pomocí echo vypíše přesně to co potřebuji, jenže když to samé chci uložit do pole, pak se chová odlišně:

Mám data z databáze - ID stránky, jméno stránky, Nadřazené ID Stránky:

Hlavní strana(1 - 0)
- Hl Podstránka(2 - 1)
- - Hl Podpodstránka(3 - 2)
Vedlejsi stránka(4 - 0)
- PodVedlejsi stránka(5 - 4)

kde první číslo je číslo ID a druhé číslo je číslo nadřazené kategorie (stránky)

Takže když dám výpis (SELECT) z databáze, dostanu do objektu:

Array ( [0] => stdClass Object ( [id] => 1 [catid] => 0 [name] => Hlavní strana ) [1] => stdClass Object ( [id] => 4 [catid] => 0 [name] => Vedlejsi stránka ) [2] => stdClass Object ( [id] => 2 [catid] => 1 [name] => Hl Podstránka ) [3] => stdClass Object ( [id] => 3 [catid] => 2 [name] => Hl Podpodstránka ) [4] => stdClass Object ( [id] => 5 [catid] => 4 [name] => PodVedlejsi stránka ) )

a když to proženu rekurzivní fci:

function showTree($data, $id=0, $name='')
{
foreach ($data as $key)
{
$show_name = $name . $key->name;
if ($key->catid == $id)
{
echo '<br>' . $show_name . '('.$key->id.' - '.$id.')';
showTree($data, $key->id, $name . " - " );
}
}
}

showTree($site_all);

pak mi to vypíše přesně to co potřebuji, viz nahoře. Jenže když to chci vložit do pole:


function showTree($data, $tree,$id=0, $name='')
{
foreach ($data as $key)
{
$show_name = $name . $key->name;
if ($key->catid == $id)
{
//echo '<br>' . $show_name . '('.$key->id.' - '.$id.')';
$tree[$key->id] = $show_name;
showTree($data, $tree, $key->id, $name . " - " );
}
}
return($tree);
}

$tree = array(0);
$tree = showTree($site_all, $tree);

pak mi to vypíše místo:

Array ( [0] => 0 [1] => Hlavní strana [4] => Vedlejsi stránka )

No a já bych samozřejmě potřeboval i indexy 2,3,5
H13
Profil
Tak už jsem na to přišel:

místo: showTree($data, $tree, $key->id, $name . " - " );
toto: tree = showTree($data, $tree, $key->id, $name . " - " );

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0