Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 4.231 pregleda

Najnovija ↓

Stampanje array-a koji je kao drvo, help! 01.11.2012. u 00:08 · pre 170 meseci #1
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?
Re: Stampanje array-a koji je kao drvo, help! 02.11.2012. u 14:06 · pre 170 meseci #2
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



Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Stampanje array-a koji je kao drvo, help! 05.11.2012. u 10:39 · pre 170 meseci #3
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); 
 
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme