- Mitglied seit
- 13.07.2006
- Beiträge
- 8.554
- Reaktionspunkte
- 394
- Kommentare
- 87
- Buffs erhalten
- 26
Hey,
ich hock hier jetzt schon seit einigen Stunden und komme einfach auf keinen grünen Zweig, bzw. nicht so richtig.
Gegeben ist ein Array:
Daraus soll ein Array erstellt werden, was ALLE möglichen Kombinationen aus den obenstehenden Optionen enthält und etwa so aussieht:
Das ist der Code den ich bisher habe:
Prinzipiell funktioniert das auch. Er erstellt nur nicht alle möglichen Kombinationen (nur 11 von 36). Ich denke, das hängt wohl noch mit den Zählern zusammen ($i1, $i2, ...). Das sehe ich auch an der Debug-Ausgabe. Ich glaube die müssten auch verschachtelt werden ... Aber uff, ich glotz da heute schon zu lange drauf. Vielleicht hat einer von euch noch 'n Gedankenblitz? ![:D :D :D](/styles/ctec/images/smilies/biggrin.png)
ich hock hier jetzt schon seit einigen Stunden und komme einfach auf keinen grünen Zweig, bzw. nicht so richtig.
Gegeben ist ein Array:
Code:
[rahmenfarbe] => Array
(
[0] => Graphite
[1] => Aluminium
[2] => Smoke
)
[rueckenunterstuetzung] => Array
(
[0] => PostureFit
[1] => Test
)
[armauflagen] => Array
(
[0] => Leder
[1] => Vinyl
)
[rollen] => Array
(
[0] => Teppichrollen
[1] => Hartbodenrollen
)
Daraus soll ein Array erstellt werden, was ALLE möglichen Kombinationen aus den obenstehenden Optionen enthält und etwa so aussieht:
Code:
[0] => Array
(
[rahmenfarbe] => Graphite
[rueckenunterstuetzung] => PostureFit
[armauflagen] => Leder
[rollen] => Teppichrollen
)
[1] => Array
(
[rahmenfarbe] => Aluminium
[rueckenunterstuetzung] => PostureFit
[armauflagen] => Leder
[rollen] => Teppichrollen
)
[2] => Array
(
[rahmenfarbe] => Smoke
[rueckenunterstuetzung] => PostureFit
[armauflagen] => Leder
[rollen] => Teppichrollen
)
[3] => Array
(
[rahmenfarbe] => Graphite
[rueckenunterstuetzung] => Test
[armauflagen] => Leder
[rollen] => Teppichrollen
)
[4] => Array
(
[rahmenfarbe] => Aluminium
[rueckenunterstuetzung] => Test
[armauflagen] => Leder
[rollen] => Teppichrollen
)
[5] => Array
(
[rahmenfarbe] => Smoke
[rueckenunterstuetzung] => Test
[armauflagen] => Leder
[rollen] => Teppichrollen
)
[6] => Array
(
[rahmenfarbe] => Graphite
[rueckenunterstuetzung] => PostureFit
[armauflagen] => Vinyl
[rollen] => Teppichrollen
)
// ... usw
Code:
$template = "test";
$maxCombinations = 0;
$optionKeys = array_keys($options);
foreach($optionKeys as $index => $optionKey) {
$indexCounters[$optionKey] = 0;
$maxCombinations += count($options[$optionKey]);
}
$maxCombinations *= count($options);
echo "Max: {$maxCombinations}\n\n";
$i1 = 0;
$i2 = 0;
while (true) {
echo str_repeat("-", 80) . "\n";
print_r($indexCounters);
echo str_repeat("-", 80) . "\n";
foreach ($optionKeys as $optionKey) {
$matrix[$template][$combinationsCount][$optionKey] = $options[$optionKey][$indexCounters[$optionKey]];
echo "matrix[\"{$template}\"][\"{$combinationsCount}\"][\"{$optionKey}\"] = options[\"{$optionKey}\"][\"{$indexCounters[$optionKey]}\"] ({$options[$optionKey][$indexCounters[$optionKey]]})\n";
}
$combinationsCount++;
echo str_repeat("-", 80) . "\n";
$indexCounters[$optionKeys[$i1]]++;
if ($indexCounters[$optionKeys[$i1]] >= count($options[$optionKeys[$i1]])) {
$i1 = 0;
$i2++;
if ($i2 >= count($options))
break;
for ($a = 0; $a < $i2; $a++)
$indexCounters[$optionKeys[$a]] = 0;
$indexCounters[$optionKeys[$i2]]++;
}
}
print_r($matrix);
![:D :D :D](/styles/ctec/images/smilies/biggrin.png)