Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Stampanje array-a koji je kao drvo, help!

[es] :: PHP :: PHP za početnike :: Stampanje array-a koji je kao drvo, help!

[ Pregleda: 2933 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

shadow-bg
Ciric Vukasin
Preduzetnik
Beograd

Član broj: 189835
Poruke: 313
*.dynamic.sbb.rs.

Sajt: www.bgwireless.net


+293 Profil

icon Stampanje array-a koji je kao drvo, help!31.10.2012. u 23:08 - pre 139 meseci
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?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
*.dynamic.sbb.rs.

Sajt: https://avramovic.info


+46 Profil

icon Re: Stampanje array-a koji je kao drvo, help!02.11.2012. u 13:06 - pre 139 meseci
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




Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

shadow-bg
Ciric Vukasin
Preduzetnik
Beograd

Član broj: 189835
Poruke: 313
*.dynamic.sbb.rs.

Sajt: www.bgwireless.net


+293 Profil

icon Re: Stampanje array-a koji je kao drvo, help!05.11.2012. u 09:39 - pre 139 meseci
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); 
 
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Stampanje array-a koji je kao drvo, help!05.11.2012. u 09:48 - pre 139 meseci
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...
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Stampanje array-a koji je kao drvo, help!

[ Pregleda: 2933 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.