Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Logisches Problem - Array mit Zahlenarrays mischen / Alle Kombinationen ermitteln

Empfohlene Antworten

Veröffentlicht

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.

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.

  • Autor

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.