Non sono mica tanto d'accordo...

unset($arr[$k]) elimina l'elemento indicizzato da $k, ed ha senso, come ha senso se fai echo($arr[$k]), non per forza devo usare $val.

E ksort() non vedo perchè dovrebbe resettare l'array ad un array vuoto???