PHP accepts all combinations

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

And I use it, but it does NOT return all "real" 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"; } ?> 

And it returns:

 cat dog dog cat cat fish fish cat dog fish fish dog 

But these are not all real combinations; all real combinations also include:

 cat cat dog dog fish fish 

And this is what I need, a method to get all the real combinations:

 cat dog dog cat cat fish fish cat dog fish fish dog cat cat dog dog fish fish 
+7
source share
2 answers

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

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

Exit:

 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 ) 

TIP: In permutations($words,2) you can get exactly what you want ...

+9
source

Your current code gives you permutations, just add duplicates:

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

What is the problem?

0
source

All Articles