errox Geschrieben 15. Oktober 2013 Geschrieben 15. Oktober 2013 Hallo Leute, ich stehe vor einem Logischem Problem. Das geht bestimmt einfacher. Ich habe 2 Arrays: 1 Array mit IDs (Variantenartikel) array (size=24) 0 => string '938' (length=3) 1 => string '1100' (length=4) 2 => string '1101' (length=4) 3 => string '1102' (length=4) 4 => string '1103' (length=4) 5 => string '1104' (length=4) 6 => string '1105' (length=4) 7 => string '1106' (length=4) 8 => string '1107' (length=4) 9 => string '1108' (length=4) 10 => string '1109' (length=4) 11 => string '1110' (length=4) 12 => string '1111' (length=4) 13 => string '1112' (length=4) 14 => string '1113' (length=4) 15 => string '1114' (length=4) 16 => string '1115' (length=4) 17 => string '1116' (length=4) 18 => string '1117' (length=4) 19 => string '1118' (length=4) 20 => string '1119' (length=4) 21 => string '1120' (length=4) 22 => string '1121' (length=4) 23 => string '1122' (length=4) [/PHP] Und ein Array, dass Zahlenarrays beinhaltet: [PHP] array (size=3) 1 => array (size=2) 0 => string '1' (length=1) 1 => string '2' (length=1) 2 => array (size=4) 0 => string '3' (length=1) 1 => string '4' (length=1) 2 => string '5' (length=1) 3 => string '6' (length=1) 3 => array (size=3) 0 => string '7' (length=1) 1 => string '8' (length=1) 2 => string '9' (length=1) Soweit sogut. Hintergrund ist der, dass das zweite Array Eigenschaften des ersten Arrays sind (Ist für einen Onlineshop). Falls es euch aufgefallen ist: Wenn man die Anzahl der Eigenschaften zusammen Multipliziert, ergibt das die Anzahl der Varianten. Das ist ja auch eigentlich logisch :-) 2 * 4 * 3 = 24 Hätte ich nun 4 Variantenebenen (z.B. Größe, Farbe, Wasserfest, Material) wären es mehr Varianten und das zweite Array hätte nicht 3 sondern 4 Zahlenarrays. Das soweit zum Hintergrund. Meine Frage ist: Ich will eine Liste (In die Datenbank) mit den Varianten und der jeweiligen KonfigurationsID. Die Tabelle hat 2 Spalten: ArticleID, OptionID. Die Tabelle würde in Etwa so aussehen: 938 # 1 938 # 3 938 # 7 1100 # 1 1100 # 3 1100 # 8 1100 # 1 1100 # 3 1100 # 9 938 # 2 938 # 3 938 # 7 usw.... [/PHP] Auf gut deutsch, so dass alle Kombinationen in der Datenbank gespeichert sind (Anzahl Variantensätze * Anzahl eigenschaftengruppen also in dem Fall 24 * 3 = 72) Jetzt die eigentliche Frage: [b]Wie ist der leichteste und schnellste Lösungsweg? Gibts vielleicht von PHP was fertiges?[/b] Ich habe bereits einen Lösungsweg aber der scheint mir bei mehreren Tausend Artikeln sehr langsam vorzukommen. Ich habs aber auch ehrlich gesagt dumm gelöst in dem ich ne Endlosschleife und ein Array hat dass erst Abbricht wenn 72 Einträge vorhanden sind und nur einträge hinzufügt, die noch nicht bereits drin sind. Es funktioniert aber es ist unsauber und uneffizient. Zitieren
R1I9C8H5I Geschrieben 15. Oktober 2013 Geschrieben 15. Oktober 2013 Warum setzt du hier nicht auf eine relationale Datenbank, wie Mysql/Postgrsql, mit entsprechenden Strukturen? Ist doch viel besser... Tabelle Artikel: - Id - Name / Bezeichnung - Eigenschaft 1 - Eigenschaft 2 oder so ähnlich... Und... je mehr Daten du im Array ablegst, desto mehr muss der Arbeitsspeicher schaffen (er wird voller...)... bei Webseiten gilt: möglichst wenige Daten im Speicher. Zitieren
errox Geschrieben 15. Oktober 2013 Autor Geschrieben 15. Oktober 2013 Hallo. Danke für deinen Kommentar. Jedoch wird es mir so vorgegeben. Die Struktur der Datenbank kann ich leider nicht abändern :-( Trotzdem vielen Dank :-) Zitieren
carstenj Geschrieben 15. Oktober 2013 Geschrieben 15. Oktober 2013 Hi, also das was du vorhast gehört definitiv in eine Datenbank, das wird ab einer bestimmten Größe sowieso nicht mehr funktionieren. Zitieren
Klotzkopp Geschrieben 15. Oktober 2013 Geschrieben 15. Oktober 2013 Da reicht eine Schleife über das erste Array. Die Indizes für die einzelnen Optionen erhältst durch wiederholte Division durch die Anzahl der Optionen der jeweiligen Eigenschaft. Der Rest ist der Options-Index, mit dem Divisionsergebnis rechnest du weiter. Beispiel: Für '938' (Index 0): 0 / 2 (Anzahl Optionen Eigenschaft 1) = 0 Rest 0 (=> Eigenschaft 1 Option 0) 0 / 4 (Anzahl Optionen Eigenschaft 2) = 0 Rest 0 (=> Eigenschaft 2 Option 0) 0 / 3 (Anzahl Optionen Eigenschaft 3) = 0 Rest 0 (=> Eigenschaft 3 Option 0) Für '1122' (Index 23): 23 / 2 (Anzahl Optionen Eigenschaft 1) = 11 Rest 1 (=> Eigenschaft 1 Option 1) 11 / 4 (Anzahl Optionen Eigenschaft 2) = 2 Rest 3 (=> Eigenschaft 2 Option 3) 2 / 3 (Anzahl Optionen Eigenschaft 3) = 0 Rest 2 (=> Eigenschaft 3 Option 2) Die Reihenfolge der Eigenschaften ist dabei egal, du musst dich nur auf eine festlegen. Zitieren
errox Geschrieben 15. Oktober 2013 Autor Geschrieben 15. Oktober 2013 Hat wunderbar geklappt! Danke! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.