(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

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

Источник: 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 "

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 06.07.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Symantec Endpoint Protection Small Business Edition, Initial Hybrid Subscription License with Support, 1-24 Devices 1 YR
Stimulsoft Reports.Ultimate Single License Includes one year subscription
SmartBear LoadComplete - Node-Locked License Subscription w/ 250 Virtual Users (includes 1 year of Maintenance)
Stimulsoft Reports Server Team 10 users
ARCHICAD 21, локальная лицензия на 12 месяцев
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование в AutoCAD
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Delphi - проблемы и решения
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100