Простой способ (при условии, что абзацы разделены новыми строками).
Сначала разбейте абзацы, а затем объедините вместе.
ПРИМЕЧАНИЕ. - Этот пример был написан до того, как абзацы HTML былиуказано в вопросе
$hugeText = "..."
$paragraphSep = "\n"
$paragraphs = explode($paragraphSep, $hugeText);
$chunks = array();
$curChunk = '';
foreach ($paragraphs as $paragraph)
{
// if it's ok to go over
$curChunk .= $paragraphSep . $paragraph;
if (strlen($curChunk) >= 1000)
{
$chunks []= $curChunk;
$curChunk = '';
}
// if it's not ok to go over
if (strlen($curChunk) + strlen($paragraphSep) + strlen($paragraph) >= 1000)
{
$chunks []= $curChunk;
$curChunk = $paragraph;
}
else
{
$curChunk .= $paragraphSep . $paragraph;
}
}
Редактировать: поскольку абзацы теперь являются HTML, а не текстом.
Основная предпосылка все еще работает - разбейте абзацы, объединитеони вместе.
Лучше всего разбивать абзацы HTML, используя dom-парсер.