首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP采用所有组合

PHP采用所有组合
EN

Stack Overflow用户
提问于 2012-03-20 20:48:14
回答 2查看 5.1K关注 0票数 8

我看到了这个algorithm that will take numbers or words and find all possible combinations

我正在使用它,但它并没有返回所有的“真实”组合。

PHP:

代码语言:javascript
复制
<?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"; 
    }
?>

然后返回:

代码语言:javascript
复制
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog

但这些并不都是实数组合,所有的实数组合也包括这些:

代码语言:javascript
复制
cat cat
dog dog
fish fish

这就是我所需要的,获得所有真实组合的方法:

代码语言:javascript
复制
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
cat cat
dog dog
fish fish
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-20 21:11:10

好的,这是你的代码(顺便说一句,谢谢你发布了一个如此有趣和具有挑战性的问题--至少对我来说是这样……:-)) -对给定元素数组的所有可能的排列(按N)使用递归的)

代码:

代码语言:javascript
复制
<?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);

?>

输出:

代码语言:javascript
复制
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),你将能够得到你想要的东西...

票数 10
EN

Stack Overflow用户

发布于 2012-03-20 21:00:03

您当前的代码给了您排列,只需添加重复项:

代码语言:javascript
复制
foreach($words as $w) {
    echo "$w $w\n";    
}

有什么问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9787051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档