<?php $headers = <<<'HTML' <html> <h5>5 Header 0.0.0.0.1</h5> <h1>1 Header 1</h1> <h2>2 Header 1.1</h2> <h2>2 Header 1.2</h2> <h3>3 Header 1.2.1</h3> <h4>4 Header 1.2.2</h4> <h2>2 Header 1.3</h2> <h3>3 Header 1.3.1</h3> <h3>3 Header 1.3.2</h3> <h5>5 Header 1.3.2.1.1</h5> <h6>6 Header 1.3.2.1.1.1</h6> <h1>1 Header 2</h1> <h2>2 Header 2.1</h2> </html> HTML; $doc = new DomDocument(); $doc->loadHTML($headers); $xpath = new DOMXPath($doc); $otag = '<ul>'; $ctag = '</ul>'; $query = '//*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6]'; $previousLevel = 1; $out[] = $otag; foreach ($xpath->query($query) as $headerElement) { $level = (int) $headerElement->nodeName[1]; if ($level < 1 || $level > 6) { $level = 1; continue; } if ($level > $previousLevel) { $out[] = str_repeat($otag, $level - $previousLevel); } elseif ($level < $previousLevel) { $out[] = str_repeat($ctag, $previousLevel - $level); } $out[] = '<li>' . $headerElement->textContent . '</li>'; $previousLevel = $level; } $out[] = str_repeat($ctag, $level); echo implode(PHP_EOL, $out);
You have javascript disabled. You will not be able to edit any code.