- var_dump: documentation ( source)
- array_splice: documentation ( source)
- array_unshift: documentation ( source)
- sort: documentation ( source)
<?php
function permuteUnique($items, $perms = [], &$return = []) {
if (empty($items)) {
$return[] = $perms;
} else {
sort($items);
$prev = false;
for ($i = count($items) - 1; $i >= 0; --$i) {
$newitems = $items;
$tmp = array_splice($newitems, $i, 1)[0];
if ($tmp != $prev) {
$prev = $tmp;
$newperms = $perms;
array_unshift($newperms, $tmp);
permuteUnique($newitems, $newperms, $return);
}
}
return $return;
}
}
$permutations = permuteUnique(["x1", "x2", "x3"]);
var_dump($permutations);