мне нужно сделать перестановки чисел (с некоторыми функциями), но
мои .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, но это не сработало, возможно потому, что я сделал это неправильно.
Спасибо
Сначала преобразуйте каждый результат в строку, а затем дедуплицируйте массив:
$p = permutate(array('1','2','3'));
$result = array();
foreach($p as $perm) {
$result[]=join("",$perm);
}
$result = array_unique($result);
print join("|", $result);
Других решений пока нет …