The above explanation is great, one point to stress is that each table entry contains all of the page address (except for the bits that don't matter, either because physical address space is much smaller than virtual address space, or because they are inside the page, so they don't need translation)
so we use the bits that "don't matter" for other things, and every entry contains a page address.