Sin ver lo que haces (tu código), yo sigo pensando que no es necesario tanta vuelta para marcar cada día con 1, 2 o 3.
Insisto, ya tienes los arrays de dias festivos, basta una comparación con in_array(), como el ejemplo del mensaje anterior.
Aunque también podrías "marcar" cada día desde la consulta de la tabla, usando JOIN:
http://www.forosdelweb.com/f86/inner...render-952003/, de hecho, tal vez te convendría LEFT en vez de INNER, pero debes probar para ver las diferencias.