Нужно: Удаление последнего слова на каждой строке, если длина строки больше 30 символов. Текст отправляется по форме
Логика:
1) Получение списка всех заголовков из формы и создание массива заголовков (здесь всё гуд)
if (isset($_POST['text'])) $text = nl2br($_POST['text']);
$show_text = str_replace( "<br />", '', $text );
//создаём массив текста из каждой строки
$result = explode("\n", trim($_POST['text']," "));
2) Определяем длину каждого заголовка (тут всё хорошо показывается)
$last_i = count($result)-1;
if (count($result) > 1) {
for ($i=0; $i < count($result); $i++) {
switch ($i) {
case 0: {
$thiscount = (iconv_strlen($result[$i], 'utf-8')-1);
//echo "</br>".$result[$i]." ";
//echo $thiscount;
$Counts[$i] = $thiscount;
continue;
}
case $last_i: {
$thiscount = iconv_strlen($result[$i], 'utf-8');
//echo "</br>".$result[$i]." ";
//echo $thiscount;
$Counts[$i] = $thiscount;
continue;
}
default: {
$thiscount = (iconv_strlen($result[$i], 'utf-8')-1);
//echo "</br>".$result[$i]." ";
//echo $thiscount;
$Counts[$i] = $thiscount;
continue;
}
}
}
};
if (count($result) == 1) {
$thiscount = (iconv_strlen($result[0], 'utf-8'));
$Counts[0] = $thiscount;
//echo $thiscount;
}
3) Создаём Массив который содержит номер заголовка, его текст и длину текста(тут тоже всё гуд)
for ($i = 0; $i<count($result); $i++) {
$TextAndCount = array();
$TextAndCount[$result[$i]] = $Counts[$i];
$TextAndCounts[] = $TextAndCount;
}
Проблема в том, чтобы удалять последнее слово, пока длина текста будет не больше 30 символов.
Пытаюсь реализовать, но то зависание браузера, то обрабатывает криво. Помогите, пожалуйста.
foreach ($TextAndCounts as $i => $j){
foreach ($j as $k => $v) {
//echo $k."</br>";
if ($v > 30) {
while($v > 30) {
$k = preg_replace("/\\s\\S+$/u", "", $k);
$v = iconv_strlen($k, "utf-8");
}
echo $k." ".$v."</br>";
} else echo "Меньше 30".$k."</br>";
}
}