Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z klasą, tworzącą drzewa
thomson89
post
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Witam!

Dziś mam problem z klasą która tworzy drzewka z tablic. Błąd to:
Kod
Warning: Invalid argument supplied for foreach() in /home2/gla10000/public_html/sklep/panel_administracyjny/funkcje/tree.php on line 74


Kod klasy mam stąd.

Ściągnąłem, tak dla testu do mojego skryptu:
  1. $polaczenie = new baza;
  2. $query = 'SELECT * FROM kategorie';
  3. $wynik = mysql_query($query);
  4. $tabelka = mysql_fetch_assoc($wynik);
  5. $out = array();
  6. while($row = mysql_fetch_assoc($wynik)) {
  7. $out[] = $row;
  8. }
  9.  
  10. $oTree = new Tree( $out );
  11. $oTree->createTree();
  12.  
  13. foreach( $oTree->getTree1D() as $k => $v ){
  14. echo str_repeat( ' ', $v['level']*5 ).'- '.$v['nazwa']."\n";
  15. // klucz level, jest tworzony wewnątrz klasy,
  16. // jego nazwę można zmienić używając metody setLevelRowName()
  17. }


Oczywiście w klasie zmieniłem nazwy pól na własne (poprawne):
  1. private $idRowName = 'id';
  2. private $parentRowName = 'id_kategori_wyzszej';
  3. private $columnRowName = 'nazwa';
  4. private $levelRowName = 'level';


Wszystko wydaje się być dobrze wpisane w skrypt, a jednak - nie działa. Błąd który się pokazuje jest w klasie. Ale powoduje go mój kawałek kodu który ją wywołuje.

Proszę o pomoc!

Ten post edytował thomson89 4.08.2010, 21:34:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
everth
post
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Teoretycznie powinno przebudować płaski wynik na drzewo (nie testowane);
  1. $id = array_walk($input,function($val) {return $val['id']);
  2. $names = array_walk($input,function($val) {return $val['name']);
  3. $parent = array_walk($input,function($val) {return $val['parent']);
  4.  
  5. function toTree(&$parent,&$names,&$id,$child_id=0,$level=0) {
  6. $result = array();
  7. $keys = array_search($parent,$child_id);
  8. foreach ($keys as $key) {
  9. $row = array();
  10. $row['value'] = $names[$key];
  11. $row['level'] = $level;
  12. $row['id'] = $id[$key];
  13. $row['children'] = toTree($parent,$names,$id, $id[$key],$level++);
  14. $result[] = $row;
  15. }
  16. return $result;
  17. }
  18.  
  19. $res = toTree($parent,$names,$id);


Ten post edytował everth 5.08.2010, 00:19:15
Go to the top of the page
+Quote Post

Posty w temacie


Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 09:18