<?php
// direct function for shuffling characters of any string
function shuffle_string ($string) {
$string_len = strlen($string); permute($string, 0, $string_len);
}
// to generate and echo all N! permutations of $string.
function permute($string, $i, $n) {
if ($i == $n) {
echo "$string\n";
} else {
for ($j = $i; $j < $n; $j++) {
swap($string, $i, $j);
permute($string, $i+1, $n);
swap($string, $i, $j); // backtracking.
}
}
}
// to swap the character at position $i and $j of $string.
function swap(&$string, $i, $j) {
$temp = $string[$i];
$string[$i] = $string[$j];
$string[$j] = $temp;
}
shuffle_string('josh');
PD9waHAKCi8vIGRpcmVjdCBmdW5jdGlvbiBmb3Igc2h1ZmZsaW5nIGNoYXJhY3RlcnMgb2YgYW55IHN0cmluZwpmdW5jdGlvbiBzaHVmZmxlX3N0cmluZyAoJHN0cmluZykgewogICAgJHN0cmluZ19sZW4gPSBzdHJsZW4oJHN0cmluZyk7CiAgICBwZXJtdXRlKCRzdHJpbmcsIDAsICRzdHJpbmdfbGVuKTsKfQovLyB0byBnZW5lcmF0ZSBhbmQgZWNobyBhbGwgTiEgcGVybXV0YXRpb25zIG9mICRzdHJpbmcuCmZ1bmN0aW9uIHBlcm11dGUoJHN0cmluZywgJGksICRuKSB7CiAgICBpZiAoJGkgPT0gJG4pIHsKICAgICAgICBlY2hvICIkc3RyaW5nXG4iOwogICAgfSBlbHNlIHsKICAgICAgICBmb3IgKCRqID0gJGk7ICRqIDwgJG47ICRqKyspIHsKICAgICAgICAgICAgc3dhcCgkc3RyaW5nLCAkaSwgJGopOwogICAgICAgICAgICBwZXJtdXRlKCRzdHJpbmcsICRpKzEsICRuKTsKICAgICAgICAgICAgc3dhcCgkc3RyaW5nLCAkaSwgJGopOyAvLyBiYWNrdHJhY2tpbmcuCiAgICAgICAgfQogICAgfQp9Ci8vIHRvIHN3YXAgdGhlIGNoYXJhY3RlciBhdCBwb3NpdGlvbiAkaSBhbmQgJGogb2YgJHN0cmluZy4KZnVuY3Rpb24gc3dhcCgmJHN0cmluZywgJGksICRqKSB7CiAgICAkdGVtcCA9ICRzdHJpbmdbJGldOwogICAgJHN0cmluZ1skaV0gPSAkc3RyaW5nWyRqXTsKICAgICRzdHJpbmdbJGpdID0gJHRlbXA7Cn0Kc2h1ZmZsZV9zdHJpbmcoJ2pvc2gnKTs=