PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alle möglichen Kombinationen von mehreren Arrays


DanMan
2010-07-15, 19:45:24
Ich frag mich gerade wie man folgendes am besten löst:

Angenommen ich hab 2 oder mehr einfache Arrays mit irgendwelchen Werten. Wie erstellt man aus denen am besten ein einzelnes Array, das alle möglichen Kombinationsmöglichkeiten zwischen den einzelnen Arrays beinhaltet?

Dabei gehts mir v.a. um die beliebige Anzahl an ursprünglichen Arrays. Bei 2 Arrays währen es ja einfach 2 verschachtelte Schleifen.

Ich verwende PHP, aber das Problem lässt sich wohl auch auf andere Sprachen übertragen.

Neomi
2010-07-15, 21:28:28
Bei mehr Arrays sind es dann eben mehr verschachtelte Schleifen. Oder du baust dir einen Iterator, der sich pro Array den aktuellen Index merkt. Inkrementiert wird erst der Index vom letzten Array. Stößt der ans Ende, wird er auf Anfang gesetzt und es wird der vom vorletzten Array inkrementiert. Stößt der ans Ende, wieder auf Anfang und den vom vorvorletzten inkrementieren und so weiter.

Alles in ein großes Array zu stopfen, würde ich unterlassen. Schon bei z.B. 5 Arrays à 100 Einträgen hast du ein resultierendes Array mit 10 Milliarden Einträgen und 5 Werten pro Eintrag. Das dürfte den Speicher deutlich sprengen. Und selbst bei deutlich kleineren oder weniger Arrays, also wenn der Speicher reicht, wäre es Verschwendung, etwas zu speichern, dessen Berechnung keinen echten Aufwand darstellt.

DanMan
2010-07-16, 19:44:42
Mehr wie 5 Arrays werden es wohl nie, und auch die Anzahl deren Einträge nicht mehr als je 20-30. Ich brauche die Kombinationsmöglichkeiten, um sie in eine DB zu schreiben, will aber nicht jedes Mal den Quelltext anfassen müssen.

Streng genommen brauche ich auch nicht alle Kombinationen, sondern nur die, die Werte aus allen Arrays enthalten. Sind sozusagen alles Pflichtfelder (geht letztendlich um einen Formular, in dem man z.B. Höhe, Breite und Farbe auswählen muss, wovon dann die Kombi auf Verfügbarkeit geprüft wird).

Vor Iteratoren hab ich immer zurückgeschreckt. Dachte ich komm vllt. mit array_walk() oder so hin. Vielleicht sollte ich sie mir doch mal anschauen. :(