我需要进行数字排列(有一些功能),但是 我的.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
答案 0 :(得分:0)
首先将每个结果转换为字符串,然后对数组进行重复数据删除:
$p = permutate(array('1','2','3'));
$result = array();
foreach($p as $perm) {
$result[]=join("",$perm);
}
$result = array_unique($result);
print join("|", $result);