Коллеги, спасибо всем, кто не пожалел своего времени на заданный вопрос!
Не зря говорят "Утро вечера мудренее..", сегодня с утра осенило ))
Решение оказалось банально простым, нужно
в конце исходной строки
добавить пробел чтоб потом спокойно искать его последнее вхождение.
В итоге мой конечный код выглядит так:
function captionF($caption) {
$encoding = 'UTF-8';
$needMAXlength = '1024'; //Обрезаем до.. символов
$caption = $caption . ' '; //Добавляем в конце пробел чтоб "точно был"
$capI = 0;
do {
$captionarr[$capI] = mb_substr($caption, 0, $needMAXlength, $encoding);
$captionarr[$capI] = mb_strrchr($captionarr[$capI], ' ', TRUE, $encoding);
$caption = str_replace($captionarr[$capI], '', $caption);
$capI++;
} while (mb_strlen($caption, $encoding) > 1); //При ">0" скрипт падал..
return $captionarr;
}
Ilyas Sarsenbaev предложил немного альтернативный вариант, его также попробовал адаптировав под свои реалии:
function captionF($caption) {
$encoding = 'UTF-8';
$needMAXlength = '1024'; //Обрезаем до.. символов
$caption = $caption . ' '; //Добавляем в конце пробел чтоб "точно был"
$capI = 0;
do {
$captionarr[$capI] = mb_substr($caption, 0, $needMAXlength, $encoding);
if ($caption[$needMAXlength] !== ' ') {
$spacePosition = mb_strrpos($captionarr[$capI], ' ', $encoding);
$captionarr[$capI] = mb_substr($caption, 0, $spacePosition, $encoding);
}
$caption = str_replace($captionarr[$capI], '', $caption);
$capI++;
} while (mb_strlen($caption, $encoding) > 1); //При ">0" скрипт падал..
return $captionarr;
}
По затраченной памяти и скорости обработки оба скрипта примерно одинаковы, так что кому надо, можете использовать любой.
Еще раз спасибо всем участвовавшим в обсуждении.