Y qué es lo que pretendes hacer con tanto shuffle?
Supongo que si en la consulta agregas un
ORDER BY RAND() LIMIT 3 después sólo necesitas cargar los 3 registros en un array y devolverlo.
- ORDER BY RAND() seleccionará los registros al azar, ya no necesitarías el shuffle, además de que en tu código podrías enviar lo mismo en las 3 posiciones.
- LIMIT 3 hará que la consulta te devuelva sólo 3 registros.
- UPS! No me había fijado que ese proceso lo repites en cada iteración del while!