- Mitglied seit
- 13.07.2006
- Beiträge
- 8.555
- 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?
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);