Получение подстроки без потери части слова

Источник: codeguru

Иногда возникает задача получить часть строки фиксированной длины (чаще всего это вводная часть от полного текста для публикации анонса материала). Для того, чтобы получить часть строки фиксированной длины, php-программисты используют функцию substr().

Эта функция возвращает подстроку строки string, начинающейся с start символа по счету и длиной length символов. string substr (string $string , int $start [, int $length ]) 

Но при использовании данной функции возникает следующая проблема - она обрезает часть слова, если его длина больше заданной величины подстроки $length. 

Рассмотрим возможные варианты решения этой проблемы. 

Первый метод 

В результирующую подстроку попадут все слова, имеющие длину не менее заданной (3 символа в нашем случае) 

PHP function 

function _substr($str, $length, $minword = 3)
{
    $sub = '';
    $len = 0;
   
    foreach (explode(' ', $str) as $word)
    {
        $part = (($sub != '') ? ' ' : '') . $word;
        $sub .= $part;
        $len += strlen($part);
       
        if (strlen($word) > $minword && strlen($sub) >= $length)
        {
            break;
        }
    }
   
    return $sub . (($len < strlen($str)) ? '...' : '');
}

"..." будет добавлено к подстроке, если ее длина получится меньше заданной. 

Следующий код выполняет ту же работу, что и substr(), но он лишен проблемы с обрезкой части слова: 

Пример: 

echo _substr('Hello World I live in Kiev',12); // Выведет "Hello World I live..."

Второй метод 

Эта функция задает количество слов, которые будут выделены их строки (с начала строки, разумеется) 

PHP function 

function text_limit($str,$limit=10)
{
    $str_s = '';
    if(stripos($str," ")){
        $ex_str = explode(" ",$str);
        if(count($ex_str)>$limit){
            for($i=0;$i<$limit;$i++){
                $str_s.=$ex_str[$i]." ";
            }
            return $str_s;
        }else{
            return $str;
        }
    }else{
        return $str;
    }
}

Принцип работы: 

- Задаем количество слов, которые необходимо выделить из строки;
- Проходим по строке;
- Если текущий символ не " " (пробел, space), то ищем дальше пока не найдем его;
- Выводим результат. 

Пример: 

echo text_limit('Hello World I live in Kiev',4); // Выведет "Hello World I live "

Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=29636