PHP: Как вы генерируете все возможные комбинации значений в массиве?

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

Если у меня есть массив, такой как:

array('a', 'b', 'c', 'd'); 

Как создать новый массив со всеми возможными комбинациями из этих 4 значений, таких как

 aaaa, aaab, aaac, aaad ... dddb, dddc, dddd 

Благодаря!

Вот еще один способ.

Эта функция увеличивается в базе ([количество элементов в массиве])

и использует функцию strtr для замены символов для строк.

 function everyCombination($array) { $arrayCount = count($array); $maxCombinations = pow($arrayCount, $arrayCount); $returnArray = array(); $conversionArray = array(); if ($arrayCount >= 2 && $arrayCount <= 36) { foreach ($array as $key => $value) { $conversionArray[base_convert($key, 10, $arrayCount)] = $value; } for ($i = 0; $i < $maxCombinations; $i++) { $combination = base_convert($i, 10, $arrayCount); $combination = str_pad($combination, $arrayCount, "0", STR_PAD_LEFT); $returnArray[] = strtr($combination, $conversionArray); } return $returnArray; } echo 'Input array must have between 2 and 36 elements'; } 

Затем …

 print_r(everyCombination(array('a', 'b', 'c', 'd'))); 

Это также кажется значительно быстрее, чем приведенный ниже рекурсивный пример.

Используя microtime () на моем сервере, этот код работает в 0.072862863540649 секунд

Ниже приведен рекурсивный пример: 0.39673089981079 секунд.

На 138% быстрее!

Вы должны использовать рекурсивную функцию

 function perm($arr, $n, $result = array()) { if($n <= 0) return false; $i = 0; $new_result = array(); foreach($arr as $r) { if(count($result) > 0) { foreach($result as $res) { $new_element = array_merge($res, array($r)); $new_result[] = $new_element; } } else { $new_result[] = array($r); } } if($n == 1) return $new_result; return perm($arr, $n - 1, $new_result); } $array = array('a', 'b', 'c', 'd'); $permutations = perm($array, 4); print_r($permutations);