Я использую небольшой набор классов, которые я написал, для вывода красиво отформатированного HTML.Если вам интересно, вы можете найти его здесь .
Чтобы получить то, что вы хотите, я бы в итоге написал что-то вроде
$mypage = page::blank();
$mypage->opennode('div', 'id="test"');
$mypage->opennode('div', 'id="test-sub"');
$mypage->closenode(2); // div, div
echo $mypage->build_output_strict();
Другой альтернативой будет использованиеполноценный шаблонизатор, которых немало.