我看到了这个algorithm that will take numbers or words and find all possible combinations
我正在使用它,但它并没有返回所有的“真实”组合。
PHP:
<?php
require_once 'Math/Combinatorics.php';
$words = array('cat', 'dog', 'fish');
$combinatorics = new Math_Combinatorics;
foreach($combinatorics->permutations($words, 2) as $p) {
echo join(' ', $p), "\n";
}
?>然后返回:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog但这些并不都是实数组合,所有的实数组合也包括这些:
cat cat
dog dog
fish fish这就是我所需要的,获得所有真实组合的方法:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
cat cat
dog dog
fish fish发布于 2012-03-20 21:11:10
好的,这是你的代码(顺便说一句,谢谢你发布了一个如此有趣和具有挑战性的问题--至少对我来说是这样……:-)) -对给定元素数组的所有可能的排列(按N)使用递归的)
代码:
<?php
function permutations($arr,$n)
{
$res = array();
foreach ($arr as $w)
{
if ($n==1) $res[] = $w;
else
{
$perms = permutations($arr,$n-1);
foreach ($perms as $p)
{
$res[] = $w." ".$p;
}
}
}
return $res;
}
// Your array
$words = array('cat','dog','fish');
// Get permutation by groups of 3 elements
$pe = permutations($words,3);
// Print it out
print_r($pe);
?>输出:
Array
(
[0] => cat cat cat
[1] => cat cat dog
[2] => cat cat fish
[3] => cat dog cat
[4] => cat dog dog
[5] => cat dog fish
[6] => cat fish cat
[7] => cat fish dog
[8] => cat fish fish
[9] => dog cat cat
[10] => dog cat dog
[11] => dog cat fish
[12] => dog dog cat
[13] => dog dog dog
[14] => dog dog fish
[15] => dog fish cat
[16] => dog fish dog
[17] => dog fish fish
[18] => fish cat cat
[19] => fish cat dog
[20] => fish cat fish
[21] => fish dog cat
[22] => fish dog dog
[23] => fish dog fish
[24] => fish fish cat
[25] => fish fish dog
[26] => fish fish fish
)提示: By permutations($words,2),你将能够得到你想要的东西...
发布于 2012-03-20 21:00:03
您当前的代码给了您排列,只需添加重复项:
foreach($words as $w) {
echo "$w $w\n";
}有什么问题吗?
https://stackoverflow.com/questions/9787051
复制相似问题