String-Struktur zu Array (Kategorien)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
auswahl
code
computer
datum
hardware
hobby
info
kategorie
kochen
laufwerk
monitor
netzteil
problem
produkt
software
struktur
typ
werkstatt
ziel
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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 ....
-
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 -
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.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage