no he seguido todos los mensajes de este post, pero a simple vista si checas la documentación de la función asort()
http://www.php.net/asort
verás que asort te devuelve un valor booleano, y tu estás intentando iterar sobre un valor booleano, cosa que es un error. El primer argumento que pasas a la función asort() es una referencia, por lo tanto las modificaciones al array se hacen automaticamente sin necesidad de reasignar el resultado