Обрезать строку по словам

Суббота, 29 Январь 2011

 

Работа со строками довольно частая задача программиста, и бывает необходимость обрезать строку до определенной длины, но не просто по символьно с добавлением троеточия в конце, а по словам. Тоесть обрезать строку до определенной длины, но так что бы слова остались целыми.

 

Решается это следующим образом: строка разбивается по разделителю "пробел", и формируется массив слов, далее в цикле проходимся по массиву слов добавляем каждое слово в новый массив, при этом на каждой итерации цикла измеряем суммарную длину строки из сформированного массива слов на предидущей итерации, плюс новое слово.

 

И если общяя сумма длины строки больше заданной то прекращаем добавление слов в массив. На выходе получаем строку со словами разделенными пробелом, и имеющюю длину не больше заданной.

 

Выполняет данную обработку строки и обрезку ее по словам, следущаяя функция на PHP, которая принимает два входных параметра - строку и ее максимальную длину.

 

Вид функции обрезки строки по словам:

 

 
$str = "Обрезать строку по словам Обрезать строку по словам";
$length = 25;
 
function strEx($str, $length){
  $str = explode(" ", $str);
  $nstr = array();
  for($t=0;$t<count($str);$t++){ 
    $strl = strlen(implode($nstr));
    $strr = strlen(implode($nstr)." ".$str[$t]);
    if($strl<$length && $strr<$length){
      array_push($nstr, " ".$str[$t]);
    }else{
      return trim(implode($nstr));
    }
  }
}
 
echo strEx($str, $length); /*вернет - 'Обрезать строку по'*/
 

 

PS. Читайте последние записи RSS Подписка на RSS

 

Метки:

Комментарии 

 
anonim Четверг, 23 Июнь 2011

Хм сорри но это бредовое решение... даже Брутальное!

5 минут подумать и вот готово решение без всяких циклов массивов и т.д.

substr($string, 0, strrpos( substr($string, 0, 300), ' ') );

 

 
 
anonim Среда, 04 Январь 2012

Ваш алгоритм нуждается в доработке так как если текст будет меньше заданного количества символов, то функция вернёт нам пустой результат. Необходимо условие проверки.

 

 

Добавить комментарий