Permutation eines zweidimensionalen Arrays
emil_der_hase
- php
Hallo,
ich habe ein großes Problem, das ich langsam nicht mehr durchblicke. Und zwar muß ich die Werte eines zweidimensionalen Arrays vollständig durchkombinieren, also eine Permutation durchführen.
Mit einem eindimensionalen Array bekomme ich das auch noch hin, aber die zweite Dimension durchsteige ich jetzt definitiv nicht mehr (ich stand schon immer mit Mathe und logischem Denken auf Kriegsfuss ;-))
Um zu verdeutlichen, wo ich hänge, hier mal ein mögliches Array:
$feld[0]['gueltig'][0] = 1;
$feld[0]['gueltig'][1] = 2;
$feld[0]['gueltig'][2] = 3;
$feld[1]['gueltig'][0] = "ab";
$feld[1]['gueltig'][1] = "cd";
$feld[1]['gueltig'][2] = "ef";
$feld[1]['gueltig'][3] = "gh";
$feld[2]['gueltig'][0] = "1g";
$feld[3]['gueltig'][0] = "test1";
$feld[3]['gueltig'][1] = "test2";
$feld[3]['gueltig'][2] = "test3";
Die Werte sollen nun so kombiniert werden, daß ein Textstrings etwa in der Art herauskommt:
Kombination 1: "1ablgtest1"
Kombination 2: "2ablgtest1"
Kombination 3: "3ablgtest1"
Kombination 4: "1cdlgtest1"
Kombination 5: "2eflgtest1"
Kombination 6: "3ghlgtest1"
Hat jemand eine Lösung für mein Problem?
Vielen Dank schon mal im voraus...
Lieber emil_der_hase,
Die Werte sollen nun so kombiniert werden, daß ein Textstrings etwa in der Art herauskommt:
Kombination 1: "1ablgtest1"
Kombination 2: "2ablgtest1"
Kombination 3: "3ablgtest1"
Kombination 4: "1cdlgtest1"
Kombination 5: "2eflgtest1"
Kombination 6: "3ghlgtest1"Hat jemand eine Lösung für mein Problem?
Offensichtlich möchtest Du in Deinen Permutationen immer den Wert von $feld[2]['gueltig'][0] und $feld[3]['gueltig'][0] fest dabei haben. Das einzige, was sich in Deinen Strings ändert, sind die Werte von $feld[0]['gueltig'] und $feld[1]['gueltig'].
Daraus lässt sich eine for-Schleife schreiben.
$permutationen = array();
foreach ($feld[0]['gueltig'] as $index => $inhalt) {
if (isset($feld[1]['gueltig'][$index])) {
$permutationen[] = $feld[0]['gueltig'][$index]
. $feld[1]['gueltig'][$index]
. $feld[2]['gueltig'][0]
. $feld[3]['gueltig'][0];
} else {
$permutationen[] = $feld[0]['gueltig'][$index]
. ' -$feld[1] hatte hierfür keinen Index!- '
. $feld[2]['gueltig'][0]
. $feld[3]['gueltig'][0];
}
}
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hello,
Mit einem eindimensionalen Array bekomme ich das auch noch hin, aber die zweite Dimension durchsteige ich jetzt definitiv nicht mehr (ich stand schon immer mit Mathe und logischem Denken auf Kriegsfuss ;-))
Dieses von Dir abgebildete ist auch dreidimensional. Es hat dreistufige Indices.
Auch wenn der zweite nicht wirklich mutiert.
Um zu verdeutlichen, wo ich hänge, hier mal ein mögliches Array:
$feld[0]['gueltig'][0] = 1;
$feld[0]['gueltig'][1] = 2;
$feld[0]['gueltig'][2] = 3;
1 2 3
$feld[1]['gueltig'][0] = "ab";
$feld[1]['gueltig'][1] = "cd";
$feld[1]['gueltig'][2] = "ef";
$feld[1]['gueltig'][3] = "gh";$feld[2]['gueltig'][0] = "1g";
$feld[3]['gueltig'][0] = "test1";
$feld[3]['gueltig'][1] = "test2";
$feld[3]['gueltig'][2] = "test3";
Also schau erstmal, ob die Aufgabenstellung so richtig ist.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin!
ich habe ein großes Problem, das ich langsam nicht mehr durchblicke. Und zwar muß ich die Werte eines zweidimensionalen Arrays vollständig durchkombinieren, also eine Permutation durchführen.
Du willst alle Möglichkeiten der ersten Gruppe mit allen Möglichkeiten der zweiten Gruppe mit allen Möglichkeiten der dritten Gruppe mit allen Möglichkeiten der vierten Gruppe.... kombiniert haben.
Lösung: Verschachtelte FOREACH-Schleifen für jede einzelne Gruppe.
Erste Gruppe:
$feld[0]['gueltig'][0] = 1;
$feld[0]['gueltig'][1] = 2;
$feld[0]['gueltig'][2] = 3;
Basis-Variable ist $feld[0]['gueltig'].
Zweite Gruppe:
$feld[1]['gueltig'][0] = "ab";
$feld[1]['gueltig'][1] = "cd";
$feld[1]['gueltig'][2] = "ef";
$feld[1]['gueltig'][3] = "gh";
Basis-Variable ist $feld[1]['gueltig'].
Dritte Gruppe:
$feld[2]['gueltig'][0] = "1g";
Basisvariable ist $feld[2]['gueltig'].
Vierte Gruppe:
$feld[3]['gueltig'][0] = "test1";
$feld[3]['gueltig'][1] = "test2";
$feld[3]['gueltig'][2] = "test3";
Basisvariable ist $feld[3]['gueltig'].
Die Werte sollen nun so kombiniert werden, daß ein Textstrings etwa in der Art herauskommt:
Nimm den ersten Wert aus der ersten Gruppe, den ersten Wert aus der zweiten Gruppe, den ersten Wert aus der dritten Gruppe und den ersten Wert aus der vierten Gruppe.
Nimm den ersten Wert aus der ersten Gruppe, den ersten Wert aus der zweiten Gruppe, den ersten Wert aus der dritten Gruppe und den ZWEITEN Wert aus der vierten Gruppe.
Nimm den ersten Wert aus der ersten Gruppe, den ersten Wert aus der zweiten Gruppe, den ersten Wert aus der dritten Gruppe und den DRITTEN Wert aus der vierten Gruppe.
Jetzt gibts in der vierten Gruppe keinen weiteren Wert, also wird in der dritten Gruppe eins weitergerückt, und in der vierten Gruppe wieder von vorn begonnen:
Nimm den ersten Wert aus der ersten Gruppe, den ersten Wert aus der zweiten Gruppe, den ZWEITEN Wert aus der dritten Gruppe ... halt!
Hm. Blöd, dass die dritte Gruppe auch nur einen Wert hat, bedeutet also, dass die zweite Gruppe schon dran ist mit weiterzählen, die dritte Gruppe bleibt also beim ersten Wert.
Nimm den ersten Wert aus der ersten Gruppe, den ZWEITEN Wert aus der zweiten Gruppe, den ersten Wert aus der dritten Gruppe und den ERSTEN Wert aus der vierten Gruppe.
foreach ($feld[0]['gueltig'] as $gruppe1) {
foreach ($feld[1]['gueltig'] as $gruppe2) {
foreach ($feld[2]['gueltig'] as $gruppe3) {
foreach ($feld[3]['gueltig'] as $gruppe4) {
echo $gruppe1 . $gruppe2 . $gruppe3 . $gruppe4;
}
}
}
}
Ich hoffe, du erkennst die Regelmäßigkeiten.
- Sven Rautenberg