Как переставлять числа без дубликатов с php и mysql

мне нужно сделать перестановки чисел (с некоторыми функциями), но
мои .php и mysql не так улучшены.
Номера будут опубликованы в формате .html, максимум 10 номеров.
Он будет переставлять числа, чтобы создать уникальное число тысяч:

если входные данные .html опубликованы 4 разных числа (1,2,3,4):
вернет: 1234,1243,1324,1342 … (24 уникальных комбинации)

если 5 разных чисел размещены на входе .html (1,2,3,4,5):
вернет: 1234,1235,1243, … (120 уникальных комбинаций)

Число будет повторяться только в том случае, если оно опубликовано, как (1,1,2,4)
вернет: 1124, 1142, 1214, … (12 уникальных комбинаций)

Затем мне нужно сохранить комбинации в строку MySQL, разделенные запятой.

Я попробовал эту функцию (нашел здесь Перестановки — все возможные наборы чисел):

$p = permutate(array('1','2','3'));
foreach($p as $perm)
print join("",$perm)."|\n";
function permutate($elements, $perm = array(), &$permArray = array())
{
if(empty($elements))
{
array_push($permArray,$perm); return;
}

for($i=0;$i<=count($elements)-1;$i++)
{
array_push($perm,$elements[$i]);
$tmp = $elements; array_splice($tmp,$i,1);
permutate($tmp,$perm,$permArray);
array_pop($perm);
}

return $permArray;
}

Выход: 123 | 132 | 213 | 231 | 312 | 321 |

Но когда дается:
$ p = permutate (array (‘1’, ‘2’, ‘2’));

выход: 122 | 122 | 212 | 221 | 212 | 221 |
Когда должно быть 122 | 212 | 221

Я попытался использовать array_unique, но это не сработало, возможно потому, что я сделал это неправильно.

Спасибо

1

Решение

Сначала преобразуйте каждый результат в строку, а затем дедуплицируйте массив:

$p = permutate(array('1','2','3'));
$result = array();
foreach($p as $perm) {
$result[]=join("",$perm);
}
$result = array_unique($result);
print join("|", $result);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]