ya le indique la razón, los check's no marcados no se envían, por lo tanto si tengo 3 registros y solo selecciono el check del ultimo, me llegará como primero, porque a php lo que le llega es el
name[] y tiene que colocar por defecto que inicia de 0, en cambio los otros campos llegan normal y no hay
huecos
francamente no veo para que complicarse tanto, haga un
var_dump($_POST); y compruébelo