如何使用php和mysql进行无重复的数字置换

时间:2014-09-26 00:39:35

标签: php mysql algorithm combinations permutation

我需要进行数字排列(有一些功能),但是 我的.php和mysql没那么改进。 这些数字将以.html格式发布,最多10个数字。 它将置换数字以创建唯一的千位数:

如果.html输入(1,2,3,4)发布了4个不同的数字: 将返回:1234,1243,1324,1342 ...(24种独特的组合)

如果.html输入(1,2,3,4,5)发布了5个不同的数字: 将返回:1234,1235,1243,...(120种独特的组合)

该号码仅在发布时重复,如(1,1,2,4) 将返回:1124,1142,1214,...(12个独特的组合)

然后我需要将组合存储到mysql行,逗号分隔。

我尝试了这个功能(在Permutations - all possible sets of numbers找到):

$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但是没有用,很可能因为我做错了。

THX

1 个答案:

答案 0 :(得分:0)

首先将每个结果转换为字符串,然后对数组进行重复数据删除:

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