Autor | Zpráva | ||
---|---|---|---|
srigi Profil |
#1 · Zasláno: 19. 1. 2010, 22:00:02
Hello, pomocou ORM z databazy vytiahnem stromovy zoznam kategorii v takejto forme => odkaz Vsimnite si pls, ze kazda polozka ma kluc level. Potreboval by som poradit s algoritmom, ktory by taketo pole preiteroval a vyplul mi pole zoradene do stromu.
THX. |
||
tiso Profil |
#2 · Zasláno: 19. 1. 2010, 22:12:30
srigi: Ako chceš aby ten výsledok presne vyzeral?
|
||
Nox Profil |
#3 · Zasláno: 19. 1. 2010, 22:21:04
Podle mě tam jde hlavně o to lft a rgt... podobný způsob má Jakub Vrána na webu, ale spíš z hlediska MySQL
Přijde mi že je to dokonce už celkem seřazené, mno, každopádně... u tohoto platí že pro uzel s level1, lft1 a rgt1 mají všichni potomci lft menší jak lft1 a rgt menší jak rgt1....přímé potomky potom získáš touto podmínkou AND level=level1+1 na konci podstromu pak lft+1=rgt myslim ....no chtěl jsem nějaký algoritmus vymyslet, ale už musim končit ...nejspíš to půjde taky najít.... |
||
srigi Profil |
#4 · Zasláno: 19. 1. 2010, 22:24:49
tiso:
takto, s tym ze "Root" (level 0) sa vo vysledku nebude vyskytovat (preskoci sa). |
||
srigi Profil |
#5 · Zasláno: 19. 1. 2010, 22:38:50
Alebo by aj teoreticky stacilo "zahlbit" polozku do pola pomocou nejakebo
$output = array(); ... foreach ($nodes as $node) { $temp = ''; for ($i = 0; $i < $node['level']; $i++) { $temp .= '[]'; // podla hodnoty $node['level'] sa vytvori prislusny pocet - [], [][], [][][] } // nejaka magia spoji $output a $temp - $output[], $output[][], $output[][][] a priradi $node } Ale neviem ci toto neporusi hierarchiu (myslim, ze ano a je to nanic sposob). |
||
srigi Profil |
#6 · Zasláno: 20. 1. 2010, 00:41:41
OK, netreba dalej riesit! Nakoniec som tu strukturu nepotreboval a postaci mi ploche pole.
|
||
tiso Profil |
#7 · Zasláno: 20. 1. 2010, 01:47:03 · Upravil/a: tiso
//$in - vstupne pole unset($in[0]);//odstranime root $out=cats_to_tree($in); function cats_to_tree($tree, $lft=0, $rgt=1000, $level=1){ $out=array(); foreach($tree as $key => $val){ if($val['lft'] > $lft and $val['rgt'] < $rgt and $val['level'] == $level){//len nody ktore nas zaujimaju $out[$val['name']]=$val; if($val['lft'] != $val['rgt']-1){//mame deti, pridaj ich $out[$val['name']]['children']=cats_to_tree($tree, $val['lft'], $val['rgt'], $level+1); } } } return $out; } edit: nemám rád nevyriešené veci, možno sa to niekomu hodí... |
||
srigi Profil |
#8 · Zasláno: 21. 1. 2010, 23:33:04
tiso:
Tak ta potesim, budem to potrebovat. Inac diky, funguje to vyborne. |
||
Časová prodleva: 13 let
|
0