Zum Inhalt springen

Logisches Problem - Array mit Zahlenarrays mischen / Alle Kombinationen ermitteln


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

Geschrieben

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 :-)

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Weiterlesen  

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...