| | |
| Stránka: 1 z 1
| [ Príspevkov: 25 ] | |
Autor | Správa |
---|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 |
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 ...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 21.04.2012 20:01 | |
|
musis si tu funkciu napisat, pouzi rekurziu
_________________ Sorry za prelkepy |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 21.04.2012 20:37 | |
|
Dikes
|
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 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 ?
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 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 |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 23.04.2012 19:39 | |
|
Ale malo by sa to dat aj takto ako som dal kod nie ? Ale mam tam chybu asi...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 23.04.2012 19:46 | |
|
ale potom ti to bude prehladavat iba prvu uroven
_________________ Sorry za prelkepy |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 23.04.2012 19:51 | |
|
A keby islo namiesto if while ? ci?
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 23.04.2012 19:52 | |
|
nie, pouzi rekurziu
_________________ Sorry za prelkepy |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 23.04.2012 19:56 | |
|
Sakra,
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 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 |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 24.04.2012 11:56 | |
|
No ja to skusim, dakujem // nic // pridané po 15 hodinách 47 minútach od posledného príspevkuOka, 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
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
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 |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 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 ...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 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 |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 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 ...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 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 |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 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 ...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 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 |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 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íspevkudokonca aj Kód: echo hlbka(4, $arr);
pise nulu
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
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 |
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 25.04.2012 10:41 | |
|
jo, nejak som na to pozabudol
_________________ Sorry za prelkepy |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 25.04.2012 11:00 | |
|
a to kde sa spravi ? A uz Vas nebudem otravovat ... podstivo dostudujem.
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 25.04.2012 11:01 | |
|
tam kde to bolo v tej prvej funkcii co som ti postol
_________________ Sorry za prelkepy |
|
Registrovaný: 06.09.07 Prihlásený: 21.03.24 Príspevky: 263 Témy: 62 | Napísal autor témy jtomcik: 25.04.2012 11:04 | |
|
Jaaaj no jasne, dakujem teraz to ide, naozaj ste mi pomohli ... cenim si to, prajem Vam pekny den.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 25 ] | |
| 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
|
|