Эта функция возвращает подстроку строки 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 "