2012-05-31 21 views
19

Duplicar posible:
algorithm that will take numbers or words and find all possible combinations
Combinations, Dispositions and Permutations in PHPPHP: ¿Cómo obtener todas las combinaciones posibles de matriz 1D?

He leído/trató muchas de las respuestas sugeridas en SO, que ninguna de ellas resuelve el problema

$array = array('Alpha', 'Beta', 'Gamma'); 

¿Cómo obtener todas las combinaciones posibles?

salida esperada:

array('Alpha', 
     'Beta', 
     'Gamma', 
     'Alpha Beta', 
     'Alpha Gamma', 
     'Beta Alpha', 
     'Beta Gamma', 
     'Gamma Alpha', 
     'Gamma Beta', 
     'Alpha Beta Gamma', 
     'Alpha Gamma Beta', 
     'Beta Alpha Gamma', 
     'Beta Gamma Alpha', 
     'Gamma Alpha Beta', 
     'Gamma Beta Alpha') 

Nota: La respuesta que estoy buscando debe incluir todas las combinaciones y todos los arreglos diferentes. Por ejemplo: 'Alpha Beta' y 'Beta Alpha' son 2 cadenas diferentes y ambas deben estar en la matriz de salida.

Gracias de antemano

+2

@lanzz casi todo! – evilReiko

+0

@Juhana esa pregunta/respuesta incluye cadenas repetidas, como 'Alpha Alpha', que no quiero – evilReiko

+0

@Juhana OP también quiero palabras sueltas – Bono

Respuesta

36

creo que su profesor será más feliz con esta solución:

<?php 

$array = array('Alpha', 'Beta', 'Gamma', 'Sigma'); 

function depth_picker($arr, $temp_string, &$collect) { 
    if ($temp_string != "") 
     $collect []= $temp_string; 

    for ($i=0; $i<sizeof($arr);$i++) { 
     $arrcopy = $arr; 
     $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element 
     if (sizeof($arrcopy) > 0) { 
      depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect); 
     } else { 
      $collect []= $temp_string. " " . $elem[0]; 
     } 
    } 
} 

$collect = array(); 
depth_picker($array, "", $collect); 
print_r($collect); 

?> 

Esto resuelve que:

Array 
(
    [0] => Alpha 
    [1] => Alpha Beta 
    [2] => Alpha Beta Gamma 
    [3] => Alpha Beta Gamma Sigma 
    [4] => Alpha Beta Sigma 
    [5] => Alpha Beta Sigma Gamma 
    [6] => Alpha Gamma 
    [7] => Alpha Gamma Beta 
    [8] => Alpha Gamma Beta Sigma 
    [9] => Alpha Gamma Sigma 
    [10] => Alpha Gamma Sigma Beta 
    [11] => Alpha Sigma 
    [12] => Alpha Sigma Beta 
    [13] => Alpha Sigma Beta Gamma 
    [14] => Alpha Sigma Gamma 
    [15] => Alpha Sigma Gamma Beta 
    [16] => Beta 
    [17] => Beta Alpha 
    [18] => Beta Alpha Gamma 
    [19] => Beta Alpha Gamma Sigma 
    [20] => Beta Alpha Sigma 
    [21] => Beta Alpha Sigma Gamma 
    [22] => Beta Gamma 
    [23] => Beta Gamma Alpha 
    [24] => Beta Gamma Alpha Sigma 
    [25] => Beta Gamma Sigma 
    [26] => Beta Gamma Sigma Alpha 
    [27] => Beta Sigma 
    [28] => Beta Sigma Alpha 
    [29] => Beta Sigma Alpha Gamma 
    [30] => Beta Sigma Gamma 
    [31] => Beta Sigma Gamma Alpha 
    [32] => Gamma 
    [33] => Gamma Alpha 
    [34] => Gamma Alpha Beta 
    [35] => Gamma Alpha Beta Sigma 
    [36] => Gamma Alpha Sigma 
    [37] => Gamma Alpha Sigma Beta 
    [38] => Gamma Beta 
    [39] => Gamma Beta Alpha 
    [40] => Gamma Beta Alpha Sigma 
    [41] => Gamma Beta Sigma 
    [42] => Gamma Beta Sigma Alpha 
    [43] => Gamma Sigma 
    [44] => Gamma Sigma Alpha 
    [45] => Gamma Sigma Alpha Beta 
    [46] => Gamma Sigma Beta 
    [47] => Gamma Sigma Beta Alpha 
    [48] => Sigma 
    [49] => Sigma Alpha 
    [50] => Sigma Alpha Beta 
    [51] => Sigma Alpha Beta Gamma 
    [52] => Sigma Alpha Gamma 
    [53] => Sigma Alpha Gamma Beta 
    [54] => Sigma Beta 
    [55] => Sigma Beta Alpha 
    [56] => Sigma Beta Alpha Gamma 
    [57] => Sigma Beta Gamma 
    [58] => Sigma Beta Gamma Alpha 
    [59] => Sigma Gamma 
    [60] => Sigma Gamma Alpha 
    [61] => Sigma Gamma Alpha Beta 
    [62] => Sigma Gamma Beta 
    [63] => Sigma Gamma Beta Alpha 
) 
+5

Sé que mi pregunta parece una tarea, ¡pero no lo es! Jaja! Sé que la solución se esconde dentro de la recursión, pero no soy bueno en absoluto. ¡Respuesta perfecta, vale una medalla! – evilReiko

+0

Gracias broseph significa mucho para mí. ¿Puedo preguntar para qué se usa si no fuera por la tarea :)? – abcde123483

+1

Este código es la clave para mejorar el motor de búsqueda de mi sitio, de modo que pueda sugerir palabras clave "familiares" para el usuario – evilReiko

Cuestiones relacionadas