serglt
Анус, ой, Ахтунг
На форуме с: Dec 2005
Cообщений: 229
Город:
 |
Не плохой алгоритм формирования дерева без рекурсии 
Решил попробовать вывести дерево без рекурсии, и вот что у меня получилось:
//--- Данные ---
$treeData = array (
array (
'title' => 'Auto&Moto',
'chields' => array (
array (
'title' => 'auto',
'chields' => array (
array ('title' => 'Vaz'),
array ('title' => 'Gaz'),
array ('title' => 'Zil'),
)
),
array (
'title' => 'moto',
'chields' => array (
array ('title' => 'Izh'),
array ('title' => 'Dnepr'),
array ('title' => 'Ural'),
)
),
)
)
);
//--- Вывод ---
$nbspCnt = 0;
$curPos = 0;
$tree = &$treeData;
$count = count ($tree);
$stateArray = array ();
do {
while ($curPos < $count) {
echo str_repeat (' ', $nbspCnt) . $tree [$curPos] ['title'] . "<br>";
if (isset ($tree [$curPos] ['chields'])) {
array_push ($stateArray, array ('tree' => &$tree, 'count' => $count, 'curPos' => $curPos + 1));
$tree = &$tree [$curPos] ['chields'];
$count = count ($tree);
$curPos = 0;
$nbspCnt ++;
} else {
$curPos ++;
}
}
if (($a = array_pop ($stateArray)) !== null) {
$curPos = $a ['curPos'];
$count = $a ['count'];
$tree = $a ['tree'];
$nbspCnt --;
}
} while ($a != null);
|