kostenloser Webspace werbefrei: lima-city


String-Struktur zu Array (Kategorien)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    suchsmart

    suchsmart hat kostenlosen Webspace.

    Hallo

    ich habe eine Liste (ein Array) mit Strings, die je eine Struktur darstellen

    Array
    (
        [0] => Computer>Hardware>Netzteil
        [1] => Computer>Hardware>Laufwerk
        [2] => Computer>Hardware>Arbeitsspeicher
        [3] => Computer>Software>Office
        [4] => Computer>Software>Grafik
        [5] => Computer>Software>Spiele
        [6] => Computer>Hardware>Monitor
        [7] => Computer>Hardware>Monitor>Kabel
        [8] => Computer>Hardware>Monitor>Adapter
        [9] => Computer>Software>Tools>Sonstiges
        [10] => Hobby>Kochen>Topf
        [11] => Hobby>Kochen>Messbecher
        [12] => Hobby>Kochen>Pfanne
        [13] => Hobby>Werkstatt>Zange
        [14] => Hobby>Werkstatt>Hammer
    )


    Wie bekomme ich das jetzt in ein (vernünftiges) Array
    damit ich als Ausgabe auf bestimmte Kategorie einschränken kann ?

    ich kann ja foreach durch die $daten gehen und dann explode() machen
    aber damit bekomme ich nur einzelne Arrays der Zeilen, aber keine Struktur

    als Ergebnis habe ich mir ein multidimensionales Array vorgestellt,
    das alle Ebenen abbildet, also je Ebene den Name der Kategorie
    und die Unter-Punkte dann wieder als Sub-Array

    habe es bisher so zusammen-gewurschtelt

    $struktur = array(); 
    
    
    foreach($daten as $item) { 
    	
    	$ixarr = explode('>',$item); 
    	
    	$iz = count($ixarr); 
    	
    	if ($iz == 4) { 
    		$struktur[$ixarr[0]][$ixarr[1]][$ixarr[2]][] = $ixarr[3]; 
    	} 
    	
    	elseif ($iz == 3) { 
    		$struktur[$ixarr[0]][$ixarr[1]][] = $ixarr[2]; 
    	} 
    	
    	elseif ($iz == 2) { 
    		$struktur[$ixarr[0]][] = $ixarr[1]; 
    	} 
    	
    	elseif ($iz == 1) { 
    		$struktur['main'][] = $ixarr[0]; 
    	} 
    
    
    }
    
    
    print "<pre>\n"; 
    print_r($struktur); 
    print "</pre>\n";



    Ergebnis ist dann so

    Array
    (
        [main] => Array
            (
                [0] => Computer
                [1] => Hobby
            )
    
        [Computer] => Array
            (
                [main] => Array
                    (
                        [0] => Hardware
                        [1] => Software
                    )
    
                [Hardware] => Array
                    (
                        [0] => Netzteil
                        [1] => Laufwerk
                        [2] => Arbeitsspeicher
                        [main] => Monitor
                        [Monitor] => Array
                            (
                                [0] => Kabel
                                [1] => Adapter
                            )
    
                    )
    
                [Software] => Array
                    (
                        [0] => Office
                        [1] => Grafik
                        [2] => Spiele
                        [main] => Array
                            (
                                [0] => Tools
                            )
    
                        [Tools] => Array
                            (
                                [0] => Sonstiges
                            )
    
                    )
    
            )
    
        [Hobby] => Array
            (
                [main] => Array
                    (
                        [0] => Kochen
                        [1] => Werkstatt
                    )
    
                [Kochen] => Array
                    (
                        [0] => Topf
                        [1] => Messbecher
                        [2] => Pfanne
                    )
    
                [Werkstatt] => Array
                    (
                        [0] => Zange
                        [1] => Hammer
                    )
    
            )
    
    )


    aber irgendwie "nicht schön" ... mit dem Value als Key für Sub-Array

    auch ist so bei mehr Daten (und mehr Ebenen) schnell das Memory-Limit erreicht

    ....... jemand ne bessere Idee wie ich da ran gehen soll ??
    Text-Struktur zu multidimensionales Array

    mit dem Ziel, das man Ausgabe für bestimmte Kategorie machen kann


    Beitrag zuletzt geändert: 9.8.2012 14:33:00 von suchsmart
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Spezifizier doch mal, wie genau du das gerne hättest.
    Ich kann jetzt nur vermuten, wie du das meinst.
    Schreib am besten mal das Ziel-Array auf, zu dem du gelangen möchtest.
  4. Autor dieses Themas

    suchsmart

    suchsmart hat kostenlosen Webspace.

    Hallo

    es gibt bestimmt verschiedene Strukturen, die funktionieren würden,
    also es muss nicht eine ganz bestimmte Struktur sein,

    wichtig (das Ziel) ist dabei einfach,
    dass ich auf bestimmte Kategorien (und desen Kinder) zugreifen kann

    Am Ende soll ein Formular heraus kommen mit (Drop-Down) Auswahl Feldern
    bzw. eine Baum-Struktur mit Links zum anklicken

    aus dem BSP: ..... wenn der User "Hobby" auswählt,
    dass er dann weiteres Dropdown mit der Auswahl Kochen oder Werkstatt bekommt
    und wenn er dann Werkstatt auswählt, dann Auswahl Zange oder Hammer

    Problem ist wohl auch die Performance, also Fehler durch erreichen des Memory-Limit

    Das BSP-Array oben ist auch stark vereinfacht,
    in den echten Daten ist es ein Multidimensionales Array,
    wobei der Kategorie-Pfad eben nur einer unter mehreren Elementen ist

    Array
    (
        [0] =>Array ( 
                 [titel] => Name des Netzteil Produkts
                 [beschreibung] => Info Text ... bla bla
                 [kategorie] => Netzteil
                 [kat_ID] => 234
                 [kat_pfad] => Computer>Hardware>Netzteil
                 [katID_pfad] => 4>51>234
                 [hersteller] => Firma
                 [preis] => 36.50
                 [info] => 500 Watt
                )
        [1] =>Array ( 
                 [titel] => Name des Laufwerk Produkts
                 [beschreibung] => Info Text ... bla bla
                 [kategorie] => Laufwerk
                 [kat_ID] => 237
                 [kat_pfad] => Computer>Hardware>Laufwerk
                 [katID_pfad] => 4>51>237
                 [hersteller] => Firma
                 [preis] => 48.20
                 [info] => DVD Brenner 16x / CD Brenner 48x
                )
        [2] =>Array ( 
         ...
                )
        ... usw ...
    )



    Ziel 1: gesamte Kategorie-Struktur (kat_pfad) als Übersicht (zur Auswahl) darstellen
    Ziel 2: nach Kategorie-Auswahl nur passende Elemente ausgeben (das ist dann kein Problem)

    mein Problem ist übersichtliche Darstellung aller möglichen Kategorien
    damit der User sehen (und klicken) kann, welche Kategorien zur Verfügung stehen

    es gibt auch jeweils Info zur Kategorie-ID, einzeln und als Struktur (Pfad)
    diese IDs könnte ich evtl ja als KEY fürs Array nehmen, aber bekomme es nicht hin

    vorallem weil:
    das ganze Array kann auch recht groß sein, z.B. hundert Haupt-Elemente
    was dann bei der Verarbeitung (Kategorie suchen) eben schnell mal zu Memory-Limit führt

    damit der User aus den umfangreichen Daten dann auch was findet
    soll es gefiltert werden zu zu aus einer bestimmten Kategorie

    damit der User eine Übersicht bekommt, welche Kategorien es überhaupt gibt
    will ich die aus den Daten extrahieren und als Baum / zur Auswahl anzeigen

    ich hoffe so ist mein Problem besser beschrieben ....
  5. Also wenn du wirklich viele Daten hast wirst du mit arrays schnell an die Systemgrenzen kommen, aber da kommt es im Grunde darauf an wieviele Daten ins Array sollen.

    Ansonsten kannst du die Daten über verschachtelte foreach if foreach ... Schleifen auslesen und dadurch sortieren und in formatiert in Variable schreiben.

    Ich verstehe nur nicht warum du die Katergorie ID angeben willst du hast du eindeutig benannte Array-Schlüssel...

    $daten["Computer"]["Hardware"]["Laufwerk"]["SSD"]["Produkt A"]["Titel"] = "Titel A";
    ... Daten zu dem Typ & Produkt
    $daten["Computer"]["Software"]["Datenverarbeitung"]["Office"]["Produkt A"]["Titel"] = "Titel A";
    ... Daten zu dem Typ & Produkt
    $daten["Hobby"]["Kochen"]["Topf"]["Produkt A"]["Titel"] = "Titel A";
    ... Daten zu dem Typ & Produkt


    Dadrüber kannst du dann über die Keys die Sortieren und ausgeben lassen. Ich weiss aber nicht genau wie sie ausgegeben werden sollen. Als List, in einer Tabelle, etc...

    Beitrag zuletzt geändert: 11.8.2012 2:16:29 von vctb
  6. theblanknotes

    theblanknotes hat kostenlosen Webspace.

    Ich weiss nicht genau wie du das besser lösen könntest, aber ich empfehle dir anstatt der if abfrage ein switch zu benutzen um ressourcen zu sparen. Ansonsten fällt mir gerade nichts ein.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!