[ Príspevkov: 25 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
NapísalOffline : 21.04.2012 17:02 | Hĺbka v strome

Ahojte, existuje prosím nejaka funkcia v php ktora my zisti ako blboko sa nachadza polozka v strome a vypise to ciselne ako v priklade ?

Vypisujem:
Kód:
foreach($xml->Tree as $key) {
echo "key['ID']";
...
..
.
}


Priklad:

ID IDP NAME HLBKA ?
1 0 Home 0
2 1 hlavna 1
3 1 hlavna 1
4 2 podkat. 2

Ďakujem ochotným za radu ...


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 21.04.2012 20:01 | Hĺbka v strome

musis si tu funkciu napisat, pouzi rekurziu


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 21.04.2012 20:37 | Hĺbka v strome

Dikes


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 23.04.2012 17:45 | Hĺbka v strome

Ahojte, Potrebujem len vypisat ako hlboko sa nachadza polozko v strome.
Kód:
function getHeigth($item_name) {
    $res = 0;
    $current_parent_id = MySQL_Query("SELECT id_parent FROM ps_category WHERE id_category = '$item_name'");
    while ($r = MySQL_Fetch_Array($current_parent_id)) {
    $id_parent = $r['id_parent'];
    }
   
    if($id_parent != 0) {
        $current_parent_id = MySQL_Query("SELECT id_parent FROM ps_category WHERE id_category = '$id_parent'");
        while ($r = MySQL_Fetch_Array($current_parent_id)) {
        $id_parent = $r['id_parent'];
        }
        $res = $res + 1;
      }
    return $res;
}


vypisujem:

Kód:
echo getHeigth($row['id_category ']) ;


Spravy mi to iba 0 a 1 nechapem. Pomozete ?


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 23.04.2012 19:28 | Hĺbka v strome

musis pouzit rekurziu, ako som ti pisal v prvej teme. btw, nechapem preco si to nenapsial do starej temy

http://stackoverflow.com/questions/1001 ... tree-depth

tvoje bude to iste, len nebudes vypisovat zoznam, ale len IDcka kategorii


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 23.04.2012 19:39 | Hĺbka v strome

Ale malo by sa to dat aj takto ako som dal kod nie ? Ale mam tam chybu asi...


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 23.04.2012 19:46 | Hĺbka v strome

ale potom ti to bude prehladavat iba prvu uroven


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 23.04.2012 19:51 | Hĺbka v strome

A keby islo namiesto if while ? ci?


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 23.04.2012 19:52 | Hĺbka v strome

nie, pouzi rekurziu


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 23.04.2012 19:56 | Hĺbka v strome

Sakra, :-)


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 23.04.2012 20:00 | Hĺbka v strome

ved som ti dal link na kompletnu funkciu, jedine co potrebujes je odstanit tie <ul> a <li> a nahradit to ciarkou


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 24.04.2012 11:56 | Hĺbka v strome

No ja to skusim, dakujem // nic :(

// pridané po 15 hodinách 47 minútach od posledného príspevku

Oka, takze skusil som to takto ...

Kód:
function getHeigth($item_name) {
    $res = 0;
    $sel = MySQL_Query("SELECT id_category, id_parent FROM ps_category WHERE id_category = '$item_name'");
    while ($r = MySQL_Fetch_Array($sel)) {
      $id_category = $r['id_category'];
      $id_parent   = $r['id_parent'];
     
      $arr[] = array(
      'id_category' => $id_category,
      'id_parent'   => $id_parent
      );
    }

    foreach ($arr as $value => $v) {
      if($v['id_parent'] != 0) {
        if(array_key_exists('id_parent', $v) ) {
        $res++;
        }
      }
    }
    return $res;
}


A itak nic ... tak uz neviem


Offline

Skúsený užívateľ
Skúsený užívateľ
Hĺbka v strome

Registrovaný: 29.10.07
Prihlásený: 12.06.17
Príspevky: 1408
Témy: 28 | 28
Bydlisko: Bratislava
Vek: 36
NapísalOffline : 24.04.2012 12:30 | Hĺbka v strome

Musis sa zamysliet co potrebujes a co robis... teda hlavne co robis :)

V prvej casti funkcie (ten vyber dat) si do pola nahadzes vsetkych rodicov pre danu kategoriu... toto ti niekedy aj vyberie viac zaznamov? Naozaj ma jedna polozka id_category niekolko roznych rodicov? Pochybujem... tu by si mal asi vybrat vsetky zaznamy... ked uz.

V druhej by si mal potom v tom poli pre svoju kategoriu hladat rodica a vzdy ked ho najdes, tak hladat ci aj ten rodic nema rodica a takto dookola az kym nedojdes k polozke bez rodica (root). Namiesto toho ale robis nejake zvlastne veci... jednak k premennej $v pristupujes ako by to bolo pole, co ale nie je a potom... aj keby to bolo formalne v poriadku, tak zistujes ci ma polozka rodica, a ak ano, tak v tom poli co pole nie je hladas retazec 'id_parent' a potom spocitavas kolko takych prvkov si nasiel? To nema hlavu ani patu.

Neviem ci robis ulohu do skoly alebo sa len tak hras, ale uroven v strome je dost dobre mat priamo v tabulke.


_________________
PC: OS: Windows 10 (64bit) CPU: INTEL Core i5-4440 GPU: ASUS ATI R9280X RAM: Kingston 8GB DDR3 1600MHz MB: MSI B85-G43 Gaming HDD: Seagate 1TB HDD Barracuda SSD: SAMSUNG 120GB HDD 840 EVO CASE: COOLERMASTER N400
Mobil: OS: Android 4.4.2 Model: LG G2 D802 16GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 24.04.2012 21:09 | Hĺbka v strome

No mam nahadzane kategorie v db ale iba ID, IDP, name ... a hlbku nemam tu teraz potrebujem doplnit naspat do db.

// pridané po 4 hodinách 43 minútach od posledného príspevku

Teraz som si myslel ze to pojde :

Kód:
<?php

function pole_set_hlbka($pole, $hlbka = -1)
{
  $subhlbka = $hlbka + 1;
  if ($hlbka < 0) {
    foreach ($pole as $key => $subpole) {
      $temp[$key] = pole_set_hlbka(($subpole), $subhlbka);
    }
    return $temp;
  }
  $pole['hlbka'] = $hlbka;
  if ($pole['ma_rodica'] && isset($pole['rodic'])) {
    foreach ($pole['rodic'] as $key => $subpole) {
      $temp[$key] = pole_set_hlbka($subpole, $subhlbka);
    }
    unset($pole['rodic']);
    $pole['rodic'] = $temp;
  }
  return $pole;
}

$pole[0] = array('Id' => '1', 'IdP' => '0', 'Name' => 'Home');
$pole[1] = array('Id' => '2', 'IdP' => '1', 'Name' => 'Jazyky');
$pole[2] = array('Id' => '3', 'IdP' => '2', 'Name' => 'PHP');
$pole[3] = array('Id' => '4', 'IdP' => '2', 'Name' => 'HTML');
$pole[4] = array('Id' => '5', 'IdP' => '4', 'Name' => 'DHTML');
$pole[5] = array('Id' => '6', 'IdP' => '4', 'Name' => 'XHTML');

foreach ($pole as $key => $v) {
$hlbka = pole_set_hlbka($v);
echo "$hlbka<br />";
}

?>


Chcem len aby mi pod seba vypisalo vsetky hlbky jednotlivych poli ... a stale pise len array kurnik

// PORADÍTE PLS ???

// pridané po 47 minútach od posledného príspevku

// PORADÍTE PLS ???

// pridané po 2 hodinách 12 minútach od posledného príspevku

// Naozaj sa nikomu neda pomoct ??? uz sa s tym drnkam pekne dlho ...


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 24.04.2012 21:47 | Hĺbka v strome

http://emer.grafika4u.sk/clanky/php-mys ... eho-dotazu

snad ti toto pomoze... ak nie tak je nacase prestat programovat alebo napisat comu presne nerozumies. pretoze funkciamu z clanku je mozne asi 10 sekundovou upravou dosiahnut to, co chces.


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 24.04.2012 21:55 | Hĺbka v strome

Jednoducho nerozumiem ako tu hlbku vypisat z ulozenych poli Id a IdP.

Kód:
$array = array
(
array('Id' => '1', 'IdP' => '0', 'Name' => 'Home'),
array('Id' => '2', 'IdP' => '1', 'Name' => 'Jazyky'),
array('Id' => '3', 'IdP' => '2', 'Name' => 'PHP'),
array('Id' => '4', 'IdP' => '2', 'Name' => 'HTML'),
array('Id' => '5', 'IdP' => '4', 'Name' => 'DHTML'),
array('Id' => '6', 'IdP' => '4', 'Name' => 'XHTML')
);


Napriklad array Id => '6' ma 'IdP' => '4' a ja potrebujem vystup 3 ...


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 24.04.2012 22:10 | Hĺbka v strome

uf prepac... som ta asi pomylil, som to zle cely cas chapal, lebo akruat som nieco podobne pisal...

ako odskodne ti davam celu funkciu na tvoj pripad

Kód:
 $arr = array(
  array('id' => 1, 'rodic' => 0),
  array('id' => 2, 'rodic' => 0),
  array('id' => 3, 'rodic' => 1),
  array('id' => 4, 'rodic' => 3),
  array('id' => 5, 'rodic' => 2),
 ); //toto si vyberies z DB
 
function hlbka($id, $prvky){
 
  static $hlbka = 0;
 
  foreach($prvky as $prvok)
 
    if($prvok['id'] == $id){
   
      $hlbka++;
      hlbka($prvok['rodic'], $prvky);
   
    }
 
  return $hlbka;       
 
}

echo hlbka(4, $arr);


ale tak ci tak tam treba rekurziu spravit, elbo potom by si mal nekonecne vela cyklov resp by si to mal obmedzene na isty pocet urovni

// pridané po 1 minúte od posledného príspevku

popripadne ak to budes pouzivat viac krat, dorob si tam reset premennej $hlbka alebo sprav ine pocitadlo, napr. cez dalsi argument


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 25.04.2012 0:49 | Hĺbka v strome

Ďakujem, Nevadi :-), mal by som sa skor naucit vyjadrovat.

// pridané po 2 hodinách 37 minútach od posledného príspevku

Sorac ye stale otravujem ale ja sa z tohto asi nedostanem ...

Kód:
$arr = array(
  array('id' => 1, 'rodic' => 0),
  array('id' => 2, 'rodic' => 1),
  array('id' => 3, 'rodic' => 2),
  array('id' => 4, 'rodic' => 3),
  array('id' => 5, 'rodic' => 4),
 ); //toto si vyberies z DB
 
function hlbka($id, $prvky, $hlbka = 0) {
   
    foreach($prvky as $prvok) {
    if($prvok['rodic'] != 0) {
      if($prvok['id'] == $id){ 
      hlbka($prvok['rodic'], $prvky, $hlbka++);
      }
    }       
  }
  return $hlbka;
}

foreach ($arr as $id) {
echo hlbka($id['id'], $arr);
}


upravil som to tak aby som mohol vypisat vsetky naraz, ale niekde mam chybu a neviem kde ...


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 25.04.2012 9:58 | Hĺbka v strome

Kód:
function hlbka($id, $prvky, $resetnut = true) {
     static $hlbka;
     if($resetnut) $hlbka = 0;
     foreach($prvky as $prvok) {
     if($prvok['rodic'] != 0) {
       if($prvok['id'] == $id){ 
       hlbka($prvok['rodic'], $prvky, false);
       }
     }       
   }
   return $hlbka;
 }


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 25.04.2012 10:28 | Hĺbka v strome

Ahoj,

vypisujem:

Kód:
foreach ($arr as $id) {
echo hlbka($id['id'], $arr);
}


ale stale pise same nuly ako aj v mojom

// pridané po 22 minútach od posledného príspevku

dokonca aj

Kód:
echo hlbka(4, $arr);


pise nulu


Offline

Správca fóra
Správca fóra
Hĺbka v strome

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 25.04.2012 10:39 | Hĺbka v strome

nemas tam inkrementaciu premennej $hlbka ;)


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 25.04.2012 10:41 | Hĺbka v strome

jo, nejak som na to pozabudol :)


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 25.04.2012 11:00 | Hĺbka v strome

:-) a to kde sa spravi ? A uz Vas nebudem otravovat ... podstivo dostudujem.


Offline

Užívateľ
Užívateľ
Hĺbka v strome

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 25.04.2012 11:01 | Hĺbka v strome

tam kde to bolo v tej prvej funkcii co som ti postol


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.09.07
Prihlásený: 22.12.15
Príspevky: 263
Témy: 62 | 62
Napísal autor témyOffline : 25.04.2012 11:04 | Hĺbka v strome

Jaaaj no jasne, dakujem teraz to ide, naozaj ste mi pomohli ... cenim si to, prajem Vam pekny den.


 [ Príspevkov: 25 ] 


Hĺbka v strome




© 2005 - 2017 PCforum, edited by JanoF