Если у вас есть такой последовательный ввод, вы можете использовать регулярные выражения.В этом случае это и очень приемлемо, и просто:
$html = preg_replace_callback("#<(h[1-6])>(.*?)</\\1>#", "retitle", $html);
function retitle($match) {
list($_unused, $h2, $title) = $match;
$id = strtolower(strtr($title, " .", "--"));
return "<$h2 id='$id'>$title</$h2>";
}
Преобразование идентификатора требует немного больше работы.А чтобы сделать регулярное выражение более надежным, шаблон соответствия внутреннего текста (.*?)
можно записать, например, как ([^<>]*)
.