PHP take all combinations

后端 未结 2 935
有刺的猬
有刺的猬 2020-12-01 17:31

I saw this algorithm that will take numbers or words and find all possible combinations

And I\'m using it, but it does NOT return all \"real\" combinations.

相关标签:
2条回答
  • 2020-12-01 17:40

    Your current code gives you permutations, simply add duplicates:

    foreach($words as $w) {
        echo "$w $w\n";    
    }
    

    What's the problem?

    0 讨论(0)
  • 2020-12-01 17:53

    OK, here's your code (and btw, thanks for posting such an interesting and challenging problem - at least for me... :-)) - using recursion for all possible permutations (by N) given an array of elements)

    Code :

    <?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);
    
    ?>
    

    Output :

    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
    )
    

    HINT : By permutations($words,2), you'll be able to get exactly what you wanted...

    0 讨论(0)
提交回复
热议问题