Por favor, la próxima vez, utiliza las etiquetas [ CODE] [ /CODE].
Lo que buscas es hacer variaciones con repetición de M elementos tomados de N en N, donde N varía de K a L, siendo K y L las longitudes mínimas y máximas respectivamente de la clave que quieres generar. Según tu primer post, K valdría 1.
Esto se puede hacer de muchas maneras, pero lo básico es saber que puedes utilizar tanto iteración como recursión.
Te pondré una solución bastante sencilla y fácil de entender:
Código:
function variacionesKL($lista, $ini, $fin){
//calcula las variaciones de longitud $ini hasta $fin
$cont = $ini;
while($cont <= $fin){
variaciones($lista, $cont);
$cont++;
}
}
y ahora sólo queda implementar el código de la función variaciones...
Código:
function variaciones($lista, $longitud){
//Calcula las variaciones de longitud $longitud
$i = 0; //Cuidadin con los desbordamientos
$numVariaciones = pow(count($lista), $longitud) - 1; //Cuidadin con los desbordamientos
$numElementos = count($lista);
while ($i <= $numVariaciones){
$clave = "";
$cont = $longitud - 1;
while ($cont >= 0){
$aux = $lista[(($i / (pow($numElementos, $cont))) % $numElementos) + 1];
$clave .= $aux;
$cont--;
}
// Aqui tratas $clave, enviandola por GET en tu caso al sitio en cuestión.
$i++;
}
}
De esta forma, observa cómo sustituyes elegantemente los bucles anidados por unas bonitas divisiones y módulos. (ver linea en negrita)
Con esta solución sólo tendrás que llamar a variacionesKL(...) pasándole el array o cadena con los elementos y las longitudes inicial = 1, y final = 3, o las que quieras.
PD1: No he probado el código, y lo he ido escribiendo sobre la marcha, por lo que si ves algún fallo, te animo a que lo corrijas y lo notifiques para editarlo. Así conseguiremos que los que vayan directamente a copiar el código no sufran tanto...
PD2: Normalmente no solemos dar la solución a los ejercicios que os mandan en vuestros estudios, pero en este caso me pareció interesante mostrar cómo convertir bucles anidados en simples operaciones como división y módulo.
Un saludo.
Marcadores