Genere automáticamente una tabla de contenido anidada basada en etiquetas de encabezado

¿Cuál de ustedes programadores astutos puede mostrarme una solución elegante codificada en PHP para generar automáticamente una tabla de contenido anidada basada en etiquetas de encabezado en la página?

Entonces tengo un documento html así:

<h1> Animals </h1>

Some content goes here.
Some content goes here.

<h2> Mammals </h2>

Some content goes here.
Some content goes here.

<h3> Terrestrial Mammals </h3>
Some content goes here.
Some content goes here.

<h3> Marine Mammals </h3>
Some content goes here.
Some content goes here.

<h4> Whales </h4>
Some content goes here.
Some content goes here.

Más específicamente, quiero una tabla de contenido vinculada en forma de una lista anidada de enlaces a encabezados en la misma página:

Tabla de contenido (generada automáticamente por código PHP)

AnimalesMamíferosMamíferos TerrestresMamíferos marinosBallenas

Respuestas a la pregunta(4)

Su respuesta a la pregunta