P: ¿Como puedo desordenar un array dos veces "aleatoriamente" y que el resultado sea el mismo?
R: He ideado un metodo a partir del conocido quickSort, sin evaluar si un elemento es menor que otro o demas, simplemente los cambia sean como sean:
Código PHP:
function desorden(arr) { //solo para desordenar mucho
for(a=1;a<=arr.length-1;a++) quickDeSort(arr,0,a);
for(a=0;a<arr.length-1;a++) quickDeSort(arr,a,arr.length-1);
}
function quickDeSort(objArray,ini,fin) {
var i=ini; var j=fin; var tmp;
do {
tmp = objArray[i];
objArray[i] = objArray[j];
objArray[j] = tmp;
if ( i <= j ) { i++; j--; }
} while ( i <= j );
if ( ini < j ) quickDeSort(objArray,ini,j);
if ( i < fin ) quickDeSort(objArray,i,fin);
}
Es curioso que si llamamos a quickDeSort con los mismos atributos dos veces (lo he probado solo con 0 y objArray.length-1), el array queda intacto. Por muchas veces que hagais reload, el desorden quedara igual y parecera aleatorio. La function desorden solo sirve para desordenar muchas veces, y darle mas realismo.
Espero que les sirva.