Schleife zur Auflistung aller möglichen Kombinationen aus einer Liste von Werten

sdh

Mitglied
Hallo erst einmal,
mein Problem ist weniger PHP als vielmehr die Formel.
Ich habe ein Array mit x Werten. Bsp. A, B, C und will als Ergebnis eine Liste mit allen Möglichen Kombinationen ausgegeben haben.

Also:

A B C
A C B
B A C
B C A
C A B
C B A

Bei vier Werten also zzgl. D muß das ganze dann eben länger sein:

A B C D
A B D C
A C B D
A C D B
usw...

Hat zufällig jemand eine kleine Schleifen zur Hand? Bei mir ist gerade Hirnblockade angesagt:-(
 
Stochastik lässt grüßen... wahrscheinlich zu kompliziert gedacht, aber hey, es scheint zu funktionieren ;) Rekursion ist hier das Zauberwort...

PHP:
<?php

function permutationen_rekursiv($array, $prefix="")
{
	$return = array();

	// Alle Elemente durchlaufen
	foreach ($array as $i => $element) {
		// Kopie des Arrays erstellen
		$temp = $array;
		// Element entfernen, damit es nicht mehrfach auftaucht
		unset($temp[$i]);
		if (sizeof($temp) > 0) {
			// Rekursiver Aufruf, einbinden der Ergebnisse in das
			// Rückgabearray per array_merge
			$return = array_merge(permutationen_rekursiv($temp, $prefix.$element), $return);
		} else {
			// Abbruchbedingung
			return array($prefix.$element);
		}
	}

	if ($prefix == "") {
		// Durch den rekursiven Aufruf wird die Liste
		// verkehrt herum geordnet erstellt, also umdrehen
		// vor der Rückgabe an den aufrufenden Programmteil
		return array_reverse($return);
	} else {
		return $return;
	}
}

$array = array("A", "B", "C", "D", "E");

$permutationen = permutationen_rekursiv($array);

print_r($permutationen);

?>
 
Zurück