- sort: documentation ( source)
<?php
function &permuteUnique($items) {
sort($items);
$size = count($items);
$return = array();
while (true) {
$return[] = $items;
$invAt = $size - 2;
for (;;$invAt--) {
if ($invAt < 0) {
break 2;
}
if ($items[$invAt] < $items[$invAt + 1]) {
break;
}
}
$swap1Num = $items[$invAt];
$inv2At = $size - 1;
while ($swap1Num >= $items[$inv2At]) {
$inv2At--;
}
$items[$invAt] = $items[$inv2At];
$items[$inv2At] = $swap1Num;
$reverse1 = $invAt + 1;
$reverse2 = $size - 1;
while ($reverse1 < $reverse2) {
$temp = $items[$reverse1];
$items[$reverse1] = $items[$reverse2];
$items[$reverse2] = $temp;
$reverse1++;
$reverse2--;
}
}
return $return;
}
permuteUnique(array(1,2,3,4,5))
?>