[ shadow-bg @ 31.10.2012. 23:08 ] @
Dakle, imam ovakvu tabelu:

Code:
--
-- Table structure for table `lokacije`
--

CREATE TABLE IF NOT EXISTS `lokacije` (
  `Ime` text NOT NULL,
  `id` int(11) NOT NULL,
  `parent` int(11) NOT NULL,
  `map` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `lokacije`
--

INSERT INTO `lokacije` (`Ime`, `id`, `parent`, `map`) VALUES
('Srbija', 1, 0, 'RS'),
('Beograd', 2, 1, 'x'),
('Hrvatska', 3, 0, 'HR'),
('Rusija', 4, 0, 'RU'),
('Zrenjanin', 8, 1, 'ZR');


Iz koje napravi ovako:

Code:
Array
(
    [0] => Array
        (
            [0] => Srbija
            [Ime] => Srbija
            [1] => 1
            [id] => 1
            [2] => 0
            [3] => RS
            [map] => RS
            [child] => Array
                (
                    [0] => Array
                        (
                            [0] => Beograd
                            [Ime] => Beograd
                            [1] => 2
                            [id] => 2
                            [2] => 1
                            [3] => x
                            [map] => x
                            [child] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [0] => Zrenjanin
                            [Ime] => Zrenjanin
                            [1] => 8
                            [id] => 8
                            [2] => 1
                            [3] => ZR
                            [map] => ZR
                            [child] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [0] => Hrvatska
            [Ime] => Hrvatska
            [1] => 3
            [id] => 3
            [2] => 0
            [3] => HR
            [map] => HR
            [child] => Array
                (
                )

        )

    [2] => Array
        (
            [0] => Rusija
            [Ime] => Rusija
            [1] => 4
            [id] => 4
            [2] => 0
            [3] => RU
            [map] => RU
            [child] => Array
                (
                )

        )

)


Pomocu ovog koda:

Code:
<?php

include 'baza.php';

$query="select * from lokacije";
$q=mysql_query($query);

$nodes=array();
$ime="";
$id="";
$parent="";
$oznaka="";

while($row=mysql_fetch_array($q)) {
    $nodes[]=$row;
}

$p = array(0 => array());
foreach($nodes as $n)
{
  $pid = $n['parent'];
  $id = $n['id'];

  if (!isset($p[$pid]))
    $p[$pid] = array('child' => array());

  if (isset($p[$id]))
    $child = &$p[$id]['child'];
  else
    $child = array();

  $p[$id] = $n;
  $p[$id]['child'] = &$child;
  unset($p[$id]['parent']);
  unset($child);

  $p[$pid]['child'][] = &$p[$id];    
}
$nodes = $p['0']['child'];
unset($p);

print "<pre>";
print_r($nodes);
print "</pre>"; 

?>


Kako da to pretvorim u
Srbija
- Beograd
- Zrenjanin
Hrvatska
Rusija

da ide rekurzivno ili kako vec, da nije limitirano na dubinu od 2-3...nego da moze i 10 u dubinu?
[ Nemanja Avramović @ 02.11.2012. 13:06 ] @
A kako tačno od tog SQL-a dobijaš ugnežđeni niz? Princip je isti, samo što umesto niza praviš drugu neku strukturu. Ja obično za ovakve prilike koristim ugnežđenu html listu koja sama odvaja "children" elemente od "parent" elemenata.

Dakle, ono što treba da uradiš je da napraviš funkciju koja prihvata niz elemenata i prolazi kroz isti, a onda:

1) prolazi kroz sve elemente (u trenutnom nivou)
2) proverava da li svaki od elemenata ima "children" elemente
3) ako nema, ispisuje naziv elementa
4) ako ima, ispisuje naziv (parent) elementa i poziva rekurzivno samu sebe, ali ovaj put prosleđuje samo niz "children" elemenata



[ shadow-bg @ 05.11.2012. 09:39 ] @
Resio sam problem. Evo ako nekome bude trebalo:

Code:
function recursive ($kat)
{
    global $count;
    $count++;

 foreach($kat as $element)
 {
    print str_repeat('-', $count)." ".$element['Ime'];
    if(is_array($element['child'])) 
        {
                echo "<br>"; 
                recursive($element['child']);
        }
    
 } 
 $count--;
}

 recursive($nodes); 
 
[ djoka_l @ 05.11.2012. 09:48 ] @
Pošto si student, možda će tebi trebati http://en.wikipedia.org/wiki/Tree_traversal
To što si napisao je preorder algoritam za obilazak stabla. Došao si do njega samostalno, ali čisto za tvoju informaciju - to je poznat problem...