function swap(&$s, $i, $j) {
$tmp = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $tmp;
}
function generate_permutations($s, $i, $len) {
if ($i == $len)
echo "$s\n";
else {
for ($j = $i; $j < $len; $j++) {
swap($s, $i, $j);
generate_permutations($s, $i + 1, $len);
}
}
}
$s = "ab";
generate_permutations($s, 0, strlen($s));
echo "\n";
$s = "abc";
generate_permutations($s, 0, strlen($s));
echo "\n";
$s = "abcd";
generate_permutations($s, 0, strlen($s));
/*
run:
ab
ba
abc
acb
bac
bca
cab
cba
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba
*/