Получение подстроки без потери части словаИсточник: 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; } } Принцип работы: - Задаем количество слов, которые необходимо выделить из строки; Пример:
echo text_limit('Hello World I live in Kiev',4); // Выведет "Hello World I live " |