Alle Kombinationen einer Zeichenmenge generieren

Disap

Mitglied
Moin zusammen.

Angenommen ich habe die Buchstaben A B und C. Diese möchte ich nun so anordnen, sodass es alle Kombinationen verwendet wurden. Ähnlich wie bei den Quizshows, wo man irgendwelche Buchstaben anordnen soll z. B. I, S, T und das Wort erraten muss (aber deswegen will ich so ein Programm nicht schreiben). Dann gibt es ja die sechs verschiedenen Möglichkeiten:
1.:
(I, S, T)
(S, I, T)
(I, T, S)
(S, T, I)
(T, S, I)
(T, I, S)
Zum einen finde ich es recht kompliziert, alle Möglichkeiten von Hand aufzuschreiben - ich übersehe immer Anordnungsmöglichkeiten –und zum anderen wachsen die Anzahl der Möglichkeiten sehr schnell. Bei vier Buchstaben wären es schon 24 verschiedene Kombinationen.
Also angenommen, ich habe nun drei Variablen mit den Werten: I, S und T.
Gibt es hier eine Möglichkeit nun die Buchstaben anzuordnen, ohne vorher schon so eine Auflistung (siehe 1. ) aufzuschreiben? Oder muss man das tatsächlich manuell machen?
Ich suche also nach einer Möglichkeit, Buchstaben automatisch in allen Kombinationen anordnen zu lassen.

Es dankt:
Disap
 
Wenn dir die Reihenfolge der Kombinationen egal ist, könntest du ganz einfach mit der str_shuffle()-Funktion die Zeichenkette so lange durcheinanderwürfeln, bis alle Kombinationen vorgekommen sind, etwa:
PHP:
<?php

	function fact( $int )
	{
		if( $int<2 ) return 1;
		for( $f=2; $int-1>1; $f*=$int-- );
		return $f;
	}

	$string = 'ist';
	$array = array();
	$fact = fact(strlen($string));
	for( $i=0; $i<$fact; ) {
		if( !isset($array[$string]) ) {
			$array[$string] = $string;
			$i++;
		}
		$string = str_shuffle($string);
	}
	print_r($array);

?>
 
Ich habe ein ähnliches Problem zu lösen, und die Funktion scheint ein guter Ansatz zu sein, vieilleicht kann mir da mal jemand weiterhelfen.

Ich möchte alle möglichen Kombinationen aus (z.B.) A B und C ausgeben, wobei ein Buchstabe auch mehrfach vorkommen darf, also auch AAB, ACA oder CCC. Es können auch gerne Zahlen 1 2 und 3 sein, falls es die Funktion einfacher/schneller macht.

Danke im Voraus.

V.
 
Zurück