hallo, ik heb de volgende klasse voor een node-object in een boom:
nu creeer ik daarna een nodestructuur waardoor er uiteindelijk voor de root node een structuur als volgt ontstaat (print_r( $hierarchy ) ):
dit eigenlijk alleen even ter verduidelijking van de opzet.
hjet gaat om het toevoegen (pushen) van de node objecten. zoals jullie zien gebeurt dit door er achteraan een toe te voegen en de size met 1 te verhogen.
echter in de print_r van het array zie je dat het eerste sub-node object geen index heeft, dus een index [] ipv [0]. hoe kan dit voorkomen. ik kan het echt nergens in plaatsen. het is dus nodig ivm het doorlopen van de subnodes in een for-lusje. nu krijg ik dus een: Fatal error: Call to a member function on a non-object in ...
wat ook overigens mij vreemd is, is dat niet alle size waarden netjes op 0 staan geinitialiseerd, misschien een samenhangend iets?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| var $id; // unique id of this node in the database var $pid; // parent id of the currect node var $name; // string name of this hierarchy node var $nodes; // child nodes of this hierarchy node var $level; // level in the total hierarchy var $size; // number of sub nodes class hierarchynode { function hierarchynode( ) { $this->id = -1; $this->pid = -1; $this->name = ""; $this->nodes = array( ); $this->level = 0; $this->size = 0; } function push( &$node ) { $this->nodes[$this->size] = &$node; $this->size++; } ..... plus nog meer functies } |
nu creeer ik daarna een nodestructuur waardoor er uiteindelijk voor de root node een structuur als volgt ontstaat (print_r( $hierarchy ) ):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| hierarchynode Object ( [id] => 1 [pid] => 0 [name] => 1 [nodes] => Array ( [] => hierarchynode Object ( [id] => 2 [pid] => 1 [name] => 1.2 [nodes] => Array ( [] => hierarchynode Object ( [id] => 5 [pid] => 2 [name] => 1.2.5 [nodes] => [level] => 2 [size] => ) [1] => hierarchynode Object ( [id] => 6 [pid] => 2 [name] => 1.2.6 [nodes] => [level] => 2 [size] => ) ) [level] => 1 [size] => 2 ) [1] => hierarchynode Object ( [id] => 3 [pid] => 1 [name] => 1.3 [nodes] => [level] => 1 [size] => ) [2] => hierarchynode Object ( [id] => 4 [pid] => 1 [name] => 1.4 [nodes] => [level] => 1 [size] => ) ) [level] => 0 [size] => 3 ) |
dit eigenlijk alleen even ter verduidelijking van de opzet.
hjet gaat om het toevoegen (pushen) van de node objecten. zoals jullie zien gebeurt dit door er achteraan een toe te voegen en de size met 1 te verhogen.
echter in de print_r van het array zie je dat het eerste sub-node object geen index heeft, dus een index [] ipv [0]. hoe kan dit voorkomen. ik kan het echt nergens in plaatsen. het is dus nodig ivm het doorlopen van de subnodes in een for-lusje. nu krijg ik dus een: Fatal error: Call to a member function on a non-object in ...
wat ook overigens mij vreemd is, is dat niet alle size waarden netjes op 0 staan geinitialiseerd, misschien een samenhangend iets?