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

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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.

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...