【发布时间】:2015-04-15 16:07:10
【问题描述】:
我有一个二维数组。假设每个职位我都有一些候选人来填补它。
例如:
Position 0 -> Candidates: 1,2,3
Position 1 -> Candidates: 3,4,5
Position 2 -> Candidates: 4,5
翻译:
Array_Position(
array('1', '2', '3'),
array('3', '4','5'),
array('4', '5')
);
我想要所有组合,但有 2 个限制:
没有重复(如果候选人已经在一个位置,它不能再次出现在另一个位置)。
这不可能发生:
1-4-4
3-3-4候选人不能比之前的“小”。
这不可能发生:
1-5-4
3-5-4
在这种特殊情况下,所有可能的组合将是:
1-3-4
1-3-5
1-4-5
2-3-4
2-3-5
2-4-5
3-4-5
我看到了一些这样的答案:
<?php
function array_cartesian() {
$_ = func_get_args();
if(count($_) == 0)
return array(array());
$a = array_shift($_);
$c = call_user_func_array(__FUNCTION__, $_);
$r = array();
foreach($a as $v)
foreach($c as $p)
$r[] = array_merge(array($v), $p);
return $r;
}
$cross = array_cartesian(
array('1', '2', '3'),
array('3', '4','5'),
array('4', '5')
);
print_r($cross);
?>
但它们都没有解决这 2 个限制。
有什么帮助吗?
谢谢!
【问题讨论】:
标签: php arrays combinations permutation