PHP принимает все комбинации

Я видел этот алгоритм, который будет принимать числа или слова и находить все возможные комбинации

И я использую его, но он НЕ возвращает все «реальные» комбинации.

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 

    ОК, вот ваш код (и, кстати, спасибо за публикацию такой интересной и сложной проблемы – по крайней мере, для меня … :-)) – используя рекурсию для всех возможных перестановок (по 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 ) 

    СОВЕТ: permutations($words,2) вы сможете получить именно то, что вы хотели …

    Ваш текущий код дает вам перестановки, просто добавляйте дубликаты:

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

    В чем проблема?