Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 25 ] 
AutorSpráva
Offline

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

Registrovaný: 06.09.07
Prihlásený: 21.03.24
Príspevky: 263
Témy: 62
Príspevok NapísalOffline : 21.04.2012 17:02

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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 21.04.2012 20:01

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 21.04.2012 20:37

Dikes


Offline

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

Registrovaný: 06.09.07
Prihlásený: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 23.04.2012 17:45

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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 23.04.2012 19:28

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 23.04.2012 19:39

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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 23.04.2012 19:46

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 23.04.2012 19:51

A keby islo namiesto if while ? ci?


Offline

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

Registrovaný: 26.12.06
Prihlásený: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 23.04.2012 19:52

nie, pouzi rekurziu







_________________
Sorry za prelkepy
Offline

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

Registrovaný: 06.09.07
Prihlásený: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 23.04.2012 19:56

Sakra, :-)


Offline

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

Registrovaný: 26.12.06
Prihlásený: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 23.04.2012 20:00

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 24.04.2012 11:56

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ý: 27.10.23
Príspevky: 1395
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 24.04.2012 12:30

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 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME
Mobil: Xiaomi POCO F2 PRO
Offline

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

Registrovaný: 06.09.07
Prihlásený: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 24.04.2012 21:09

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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 24.04.2012 21:47

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 24.04.2012 21:55

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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 24.04.2012 22:10

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 25.04.2012 0:49

Ď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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 25.04.2012 9:58

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 25.04.2012 10:28

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: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 25.04.2012 10:39

nemas tam inkrementaciu premennej $hlbka ;)







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

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

Registrovaný: 26.12.06
Prihlásený: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 25.04.2012 10:41

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 25.04.2012 11:00

:-) 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ý: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 25.04.2012 11:01

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ý: 21.03.24
Príspevky: 263
Témy: 62
Príspevok Napísal autor témyOffline : 25.04.2012 11:04

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


Odpovedať na tému [ Príspevkov: 25 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Farebná hĺbka monitora

v Monitory, televízory a projektory

1

345

28.01.2020 22:11

stiv Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra