На этот раз мне пришлось попотеть не один час, решая эту задачу, но, к сожалению, ничего путёвого не вышло 

Требуется сделать постраничный вывод текста.    
Цель:  Текст должен быть ограничен $maxkol символов, с сохранением разделения на абзацы. 
 С нумерацией я и сам разобрался, а вот с УМНЫМ делением страницы пришлось туговато ...
Номер страницы передаётся браузеру через адресную строку.
Мы имеем переменную $text с текстом всей статьи.
План действий такой:
1. Разбиваем текст по параграфам
$par = explode ("((((",  $text);
(((( — любой набор символов перед 
2. Ограничиваем кол-во параграфов ($max), учитывая № страницы($page), загоняем результат в $text2
$nom=$page*$max;
for ($i=($page-1)*$max; $i<$nom; $i++){ 
$text2 =$text2." ".$par["$i"];}
3. Проверяем на кол-во символов
$slova = explode (" ",  $text2);
$ctr=count($slova);
if ($ctr<$maxkol) 
4. И увеличиваем $max на 1, если кол-во символов меньше заданного
{$max++;}
5. Как теперь прогнать всё это с новым значением $max с сохранением нового значения, для последующего использования при обращении к «другой странице»? 
Я пытался использовать «while», но, скорее всего, у меня маловато опыта (на последней странице происходит зацикливание(при большом $maxkol) + новое значение $max игнорируется при обработке другой страницей):
$maxkol=200;
$ctr=0;
$par = explode ("((((",  $text);
$max=0;
while ($ctr<$maxkol2) {  $max++; $text2=\'\';
$nom=$page*$max;
for ($i=($page-1)*$max; $i<$nom; $i++){ 
$text2 =$text2." ".$par["$i"];}
$slova = explode (" ",  $text2);
$ctr=count($slova);
}
echo "$text2";
.................
 Читал кое-что про «do» , но возникли проблемы с синтаксисом.
В результате должен получиться текст немного больше заданного, но с сохранением форматирования по абзацам + новая страница должна начинаться с того места, где закончилась предидущая.
 Помогите, пожалуйста, т.к. идея есть, а осуществить её не получается.
 Возможно, кто-то предложит свой вариант решения «Цели» — буду очень благодарен.