Acudo a vosotros para que me ayudéis en lo posible o me déis alguna idea de cómo hacer lo que os explico a continuación.
Tengo una función en PHP donde los datos que "entran" son dos arrays multi-dimensionales de la forma:
Código:
Estos arrays pueden tener n arrays donde las claves pueden existir o no, y esas claves siempre tienen las mismas dos combinaciones en sus valores, por ejemplo, la clave 1 puede tener el valor v o V, o la clave 7 los valores r o R. El resultado devuelto debe ser una array con todas las combinaciones posibles entre los arrays muestra0 y muestra1, de la manera:$muestra0 = array( 0 => (1 => 'P', 4 => 'V', 18 => 'b', 19 => 'a'), 1 => (1 => 'P', 4 => 'v', 18 => 'b', 19 => 'a'), 2 => (1 => 'P', 4 => 'V', 18 => 'b', 19 => 'A')); $muestra1 = array( 0 => (1 => 'P', 4 => 'v', 18 => 'b', 19 => 'A'), 1 => (1 => 'P', 4 => 'v', 18 => 'b', 19 => 'A'), 2 => (1 => 'p', 4 => 'V', 18 => 'B', 19 => 'A'));
Código:
En este array según la clave el elemento en mayúsculas se ha de colocar primero, en otros, como en la clave 19, el valor pasado por muestra0 siempre irá primero.$resultado = array( 0 => (1 => 'P-P', 4 => 'V-v', 18 => 'b-b', 19 => 'a-A'), 1 => (1 => 'P-P', 4 => 'V-v', 18 => 'b-b', 19 => 'a-A'), 2 => (1 => 'P-p', 4 => 'V-V', 18 => 'B-b', 19 => 'a-A'), 3 => (1 => 'P-P', 4 => 'v-v', 18 => 'b-b', 19 => 'a-A'), 4 => (1 => 'P-P', 4 => 'v-v', 18 => 'b-b', 19 => 'a-A'), 5 => (1 => 'P-p', 4 => 'V-v', 18 => 'B-b', 19 => 'a-A'), 6 => (1 => 'P-P', 4 => 'V-v', 18 => 'b-b', 19 => 'A-A'), 7 => (1 => 'P-P', 4 => 'V-v', 18 => 'b-b', 19 => 'A-A'), 8 => (1 => 'P-p', 4 => 'V-V', 18 => 'B-b', 19 => 'A-A'));
Bien, esto lo he hecho mediante foreachs anidados y una serie de ifs dentro de ellos y el resultado es correcto. Pero el problema viene cuando se añaden más elementos al array, por ejemplo:
Código:
Al añadir más elementos el tiempo de cálculo se va incrementado provocando en cierto número de elementos un error de tiempo de ejecución excedido. ¿Podria resolverlo mediante una función recursiva? En caso afirmativo, ¿cómo?$muestra0 = array( 0 => (1 => 'P', 4 => 'V', 7 => 'r', 18 => 'b', 19 => 'a'), 1 => (1 => 'P', 4 => 'v', 7 => 'R', 18 => 'b', 19 => 'a'), 2 => (1 => 'P', 4 => 'V', 7 => 'R', 18 => 'b', 19 => 'A') ...); $muestra1 = array( 0 => (1 => 'P', 4 => 'v', 7 => 'r', 18 => 'b', 19 => 'A'), 1 => (1 => 'P', 4 => 'v', 7 => 'r', 18 => 'b', 19 => 'A'), 2 => (1 => 'p', 4 => 'V', 7 => 'r', 18 => 'B', 19 => 'A') ...);
Gracias.
PD. Perdonad si algunos nombres o conceptos no los he empleado correctamente, pero soy bastante novato en esto y lo aprendido ha sido de forma autodidacta.