function swap(&$str, $i, $j) {
$temp = $str[$i];
$str[$i] = $str[$j];
$str[$j] = $temp;
}
function generatePermutation(&$str, $l, $r) {
if ($l == $r) {
echo implode('', $str) . PHP_EOL;
} else {
for ($i = $l; $i <= $r; $i++) {
swap($str, $l, $i);
generatePermutation($str, $l + 1, $r);
swap($str, $l, $i); // backtrack
}
}
}
$s = str_split("ABC");
generatePermutation($s, 0, count($s) - 1);
/*
run:
ABC
ACB
BAC
BCA
CBA
CAB
*/