art-d-sign
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 27.04.2008, 20:49   #1
TP-Senior
 
Benutzerbild von Schneemann
 
Registriert seit: Jan 2006
Schneemann macht alles soweit korrekt
Question

Verschachteltes Array aus Nested Sets


Hallo,

ich komme einfachnicht weiter. Ziel ist ein verschachteltes Array, das aus einer Nested Sets Anordnung gebildet wird.

So sähe der Baum optisch aus:
PHP-Code:
Lebewesen
|
`
-- Säugetiere
|   |
|   
`-- Primaten
|   |   |
|   |   `
-- Halbaffen
|   |   |
|   |   
`-- Affen
|   |
|   `
-- Nagetiere
|
`-- Menschen
    
|
    `
-- Asiaten
    |
    
`-- Afrikaner 
Die Abfrage liefert, wie nachfolgend sortiert, diese Werte:
PHP-Code:
id  name        level  kinder  davor  danach
============================================
 
7  Lebewesen    0     8       0      0
10  Säugetiere   1     4       1      0
 2  Primaten     2     2       1      0
 8  Halbaffen    3     0       1      0
 4  Affen        3     0       0      1
33  Nagetiere    2     0       0      1
52  Menschen     1     2       0      1
22  Asiaten      2     0       1      0
26  Afrikaner    2     0       0      1 
"davor sagt, ob der Eintrag ein Elternelement hat, "danach" sagt ob der Eintrag Kinder hat.

Wie kann man nun anhand dieser Werte ein verschachteltes Array bauen mit der ID als Key?
PHP-Code:
Array
(
  [
7] => Array
    (
      [
id] => 7
      
[name] => Lebewesen
      
[child] => Array
        (
          [
10] => Array
            (
              [
id] => 10
              
[name] => Säugetiere
              
[child] => Array
                (
                  ...
                )
            )
          [
52] => Array
            (
              [
id] => 52
              
[name] => Menschen
              
[child] => Array
                (
                  [
22] => Array
                    (
                      [
id] => 22
                      
[name] => Asiaten
                    
)
                  [
26] => Array
                    (
                      [
id] => 26
                      
[name] => Afrikaner
                    
)
                )
            )
        )
    )

__________________
Gruß,
Peter
Schneemann ist offline   Mit Zitat antworten


Alt 28.04.2008, 10:27   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Hi,

hier mal ein Ansatz. Die Abfrage nach level kann man auch noch eleganter lösen.

PHP-Code:
$rows = array(
    array(
7,'Lebewesen',0,8,0,0),
    array(
10,'Säugetiere',1,4,1,0),
    array(
2,'Primaten',2,2,1,0),
    array(
8,'Halbaffen',3,0,1,0),
    array(
4,'Affen',3,0,0,1),
    array(
33,'Nagetiere',2,0,0,1),
    array(
52,'Menschen',1,2,0,1),
    array(
22,'Asiaten',2,0,1,0),
    array(
26,'Afrikaner',2,0,0,1)  
);

$temp=array();
$new true;
$level = -1;
foreach(
$rows as $k=>$a) {
    if (
$a[2] == && $a[2]!=$level) {
        
$levelId = array(); // reset array
    
}
    
$id $a[0];
    
$level $a[2];
    
$levelId[$level]=$a[0];
    echo 
'Level '.$a[2].' ID '.$id.'</br>';
    
    
$array =  array(
            
'id' => $id,
    );
    
    if (
$level == 0) {
        
$temp[$id] = $array;
    } elseif (
$level == 1) {
        
$temp[$levelId[0]]['child'][$id] = $array;    
    } elseif (
$level == 2) {
        
$temp[$levelId[0]]['child'][$id][$levelId[1]]['child'] = $array;    
    } elseif (
$level == 3) {
        
$temp[$levelId[0]]['child'][$id][$levelId[1]]['child'][$levelId[2]]['child'] = $array;    
    }
    
}
echo 
'<h1>Rows</h1>';
echo 
'<pre>'.print_r($rows,true).'</pre>';
echo 
'<h1>Array</h1>';
echo 
'<pre>'.print_r($temp,true).'</pre>'
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 28.04.2008, 10:34   #3
TP-Senior
 
Benutzerbild von Schneemann
 
Registriert seit: Jan 2006
Schneemann macht alles soweit korrekt
Problem dabei ist aber, dass das nur in Ebene 1 funktioniert.
__________________
Gruß,
Peter
Schneemann ist offline   Mit Zitat antworten
Alt 28.04.2008, 10:43   #4
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
wieso? Hast Du Dir die Ausgabe des Scriptes angeschaut?
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 28.04.2008, 23:42   #5
TP-Senior
 
Benutzerbild von Schneemann
 
Registriert seit: Jan 2006
Schneemann macht alles soweit korrekt
Ja, ich habe deinen Code ausgeführt und das Ergebnis ist nicht korrekt.

PHP-Code:
Array
(
  [
7] => Array
    (
      [
id] => 7
      
[child] => Array
        (
          [
10] => Array
            (
              [
id] => 10
            
)

          [
2] => Array
            (
              [
10] => Array
                (
                  [
child] => Array
                    (
                      [
id] => 2
                    
)
                )
            )

          [
8] => Array
            (
              [
10] => Array
                (
                  [
child] => Array
                    (
                      [
2] => Array
                        (
                          [
child] => Array
                            (
                              [
id] => 8
                            
)
                        )
                    )
                )
            )

          [
4] => Array
            (
              [
10] => Array
                (
                  [
child] => Array
                    (
                      [
2] => Array
                        (
                          [
child] => Array
                            (
                              [
id] => 4
                            
)
                        )
                    )
                )
            )

          [
33] => Array
            (
              [
10] => Array
                (
                  [
child] => Array
                    (
                      [
id] => 33
                    
)
                )
            )

          [
52] => Array
            (
              [
id] => 52
            
)

          [
22] => Array
            (
              [
52] => Array
                (
                  [
child] => Array
                    (
                      [
id] => 22
                    
)
                )
            )

          [
26] => Array
            (
              [
52] => Array
                (
                  [
child] => Array
                    (
                      [
id] => 26
                    
)
                )
            )
        )
    )

Die Kinder sind öfters vorhanden als sie sein dürften und teilweise auch doppelt. Alles hängt unter der ID 7, auch die Kinder von anderen Bäumen.
__________________
Gruß,
Peter
Schneemann ist offline   Mit Zitat antworten
Alt 28.04.2008, 23:56   #6
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
vergleich mal mit Deinem Array

ja gut, war ein kleiner Fehler drin, aber war ja nur ein Ansatz
PHP-Code:
$rows = array(
    array(
7,'Lebewesen',0,8,0,0),
    array(
10,'Säugetiere',1,4,1,0),
    array(
2,'Primaten',2,2,1,0),
    array(
8,'Halbaffen',3,0,1,0),
    array(
4,'Affen',3,0,0,1),
    array(
33,'Nagetiere',2,0,0,1),
    array(
52,'Menschen',1,2,0,1),
    array(
22,'Asiaten',2,0,1,0),
    array(
26,'Afrikaner',2,0,0,1)  
);

$temp=array();
$new true;
$level = -1;
foreach(
$rows as $k=>$a) {
    if (
$a[2] == && $a[2]!=$level) {
        
$levelId = array(); // reset array
    
}
    
$id $a[0];
    
$level $a[2];
    
$levelId[$level]=$a[0];
    echo 
'Level '.$a[2].' ID '.$id.'</br>';
    
    
$array =  array(
            
'id' => $id,
            
'name' => $a[1]
    );
    
    if (
$level == 0) {
        
$temp[$id] = $array;
    } elseif (
$level == 1) {
        
$temp[$levelId[0]]['child'][$id] = $array;    
    } elseif (
$level == 2) {
        
$temp[$levelId[0]]['child'][$levelId[1]]['child'][$id] = $array;    
    } elseif (
$level == 3) {
        
$temp[$levelId[0]]['child'][$levelId[1]]['child'][$levelId[2]]['child'][$id] = $array;    
    }
    
}
echo 
'<h1>Rows</h1>';
echo 
'<pre>'.print_r($rows,true).'</pre>';
echo 
'<h1>Array</h1>';
echo 
'<pre>'.print_r($temp,true).'</pre>'
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Verschachteltes Array aus Nested Sets Verschachteltes Array aus Nested Sets
« Objekte und Sessions in PHP | Fehler im Kalenderblatt »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:26 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11