Foros del Web » Programando para Internet » PHP »

Combinacion o permutacion de Arrays

Estas en el tema de Combinacion o permutacion de Arrays en el foro de PHP en Foros del Web. Saludos mis estimados, esta vez vengo con un problema que siento es mas de logica que de un lenguaje de programacion en si, pero lo ...
  #1 (permalink)  
Antiguo 24/05/2012, 15:10
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años
Puntos: 4
Exclamación Combinacion o permutacion de Arrays

Saludos mis estimados, esta vez vengo con un problema que siento es mas de logica que de un lenguaje de programacion en si, pero lo estoy trabajando con PHP asi que espero y sea este el lugar correcto. De antemano debo aclarar que explicar el problema tambien se me dificulta mucho asi que espero poder ser claro.

En un script que estoy haciendo, obtengo un listado de preguntas en un array, dichas preguntas pueden ser desde 1 a n preguntas, cada pregunta tiene diferentes opciones a elegir que van de 1 a m opciones, es decir tanto al cantidad de preguntas como las opciones posibles de cada pregunta son inciertas.
Ahora bien, cada opcion de cada pregunta tiene una porcion de una URL y he aqui el problema, cada pregunta se responderia de forma secuencial es decir de la pregunta 1 se elige la opcion a, de la pregunta 2 la opcion b, de la pregunta 3 la opcion a y cada una de estas nos da una parte de la URL digamos en este escenario "p1_opa/", "p2_opb /", "p3_opa/" y al unir estas partes de la url tengo la url que necesito.

Ahora bien todas las url's se crean combinando opciones de todas las preguntas disponibles, voy a poner un array de ejemplo talvez me es mas facil de explicar:

Código PHP:
Array
(
    [
0] => Array
        (
            [
OptionId] => 58
            
[Question] => Is your truck equipped with a floor-mounted manual 4x4 shifter?
            [
Choices] => Array
                (
                    [
0] => Array
                        (
                            [
ChoiceId] => 705
                            
[Choice] => No
                            
[Url] => 4x4-manual-floor-shifter/no/
                            [
Exceptions] => Array
                                (
                                )

                        )

                )

        )

    [
1] => Array
        (
            [
OptionId] => 2
            
[Question] => Select your vehicle's bodystyle:
            [Choices] => Array
                (
                    [0] => Array
                        (
                            [ChoiceId] => 119
                            [Choice] => Regular Cab
                            [Url] => bodystyle/regular-cab/
                            [Exceptions] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [ChoiceId] => 143
                            [Choice] => SuperCab (Extended Cab)
                            [Url] => bodystyle/supercab-extended-cab/
                            [Exceptions] => Array
                                (
                                )

                        )

                    [2] => Array
                        (
                            [ChoiceId] => 632
                            [Choice] => SuperCrew (Crew Cab)
                            [Url] => bodystyle/supercrew-crew-cab/
                            [Exceptions] => Array
                                (
                                )

                        )

                )

        )

    [2] => Array
        (
            [OptionId] => 68
            [Question] => Please select your vehicle'
s floor mat retention device configuration:
            [
Choices] => Array
                (
                    [
0] => Array
                        (
                            [
ChoiceId] => 919
                            
[Choice] => Dual Floor Posts
                            
[Url] => floor-retention-device-type/dual-floor-posts/
                            [
Exceptions] => Array
                                (
                                )

                        )

                    [
1] => Array
                        (
                            [
ChoiceId] => 914
                            
[Choice] => Single Floor Hook
                            
[Url] => floor-retention-device-type/single-floor-hook/
                            [
Exceptions] => Array
                                (
                                )

                        )

                )

        )

    [
3] => Array
        (
            [
OptionId] => 89
            
[Question] => Please select your vehicles center console configuration:   
            [
Choices] => Array
                (
                    [
0] => Array
                        (
                            [
ChoiceId] => 866
                            
[Choice] => Flow-Through Center Console
                            
[Url] => ford-flow-through-console/Flow-Through_Center_Console/
                            [
Exceptions] => Array
                                (
                                )

                        )

                    [
1] => Array
                        (
                            [
ChoiceId] => 969
                            
[Choice] => Non-Flow-Through Center Console
                            
[Url] => ford-flow-through-console/Non-Flow-Through_Center_Console/
                            [
Exceptions] => Array
                                (
                                )

                        )

                    [
2] => Array
                        (
                            [
ChoiceId] => 867
                            
[Choice] => Not Equipped
                            
[Url] => ford-flow-through-console/Not Equipped/
                            [
Exceptions] => Array
                                (
                                )

                        )

                )

        )



Nota: si se ve mal la manera en que posteo el array, pueden descargarlo en txt de la siguiente URL http://www.mediafire.com/view/?emj7y2ylwtum7ci

Si vemos este array, tiene 4 preguntas (0 a 3) y cada prgunta tiene las siguientes opciones:
0) Pregunta 1: tiene una unica opcion (a)
1) Pregunta 2: tiene 3 opciones (c,d,e)
2) Pregunta 3: tiene 2 opciones (f,g)
3) Pregunta 4: tiene 3 opciones (h,i,j)

Pues bien, las posibles combinaciones serian 18 (1x3x2x3) asi:

1) a+c+f+h
2) a+c+f+i
3) a+c+f+j
4) a+c+g+h
5) a+c+g+i
6) a+c+g+j
7) a+d+f+h
8) a+d+f+i
9) a+d+f+j
10) a+d+g+h
11) a+d+g+i
12) a+d+g+j
13) a+e+f+h
14) a+e+f+i
15) a+e+f+j
16) a+e+g+h
17) a+e+g+i
18) a+e+g+j

Pues bien, necesito poder obtener esta lista de URL's combinadas de esa manera ya intente de varias formas y me ha sido imposible considerando que la cantidad de preguntas y opciones son variables, no les pongo el codigo que tengo porque hace un desastre no funciona para nada bien y creo que si lo pongo confundiria mas de lo que beneficiaria, por favor un alma caritativa que me apoye con esto, ya tengo mucho queriendo resolverlo.
De antemano gracias
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #2 (permalink)  
Antiguo 24/05/2012, 18:13
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años
Puntos: 4
Respuesta: Combinacion o permutacion de Arrays

bueno amigos, he logrado resolver el problema de esta combinacion de arrays, si a alguien le interesa puede avisarme y con gusto la comparto.... no lo hago en este momento pues estoy integrandola con la aplicacion primero pues me urge.... pero con gusto la comparto despues
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.

Etiquetas: arrays, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:06.