Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: ошибка с функцией

Сообщения:  [1-10]   [11-13] 

 
 автор: mihdan   (13.06.2013 в 13:52)   письмо автору
 
   для: DangerBay   (10.06.2013 в 15:10)
 

Ну резать слова, согласитесь, тоже не верно. Приведенные вами слова встречаются редко - всего не учтешь сразу.

  Ответить  
 
 автор: DangerBay   (10.06.2013 в 15:10)   письмо автору
 
   для: mihdan   (10.06.2013 в 14:40)
 

А есть точные данные что именно будет подставляться? Там может быть всё что угодно.
Выпадут, например, слова:
частнопредпринимательский
человеконенавистничество
высокопревосходительство
рентгеноэлектрокардиографический
А нам порезать нужно по 20 символов.
Функция вернет просто " …". Это корректно? Явно не то, что ожидается.

  Ответить  
 
 автор: mihdan   (10.06.2013 в 14:40)   письмо автору
 
   для: DangerBay   (09.06.2013 в 20:54)
 

Зачем? Задача усечь строку, не порезав слова посередине. Вы же предлагаете наоборот резать "длинные" слова

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 20:54)   письмо автору
 
   для: mihdan   (09.06.2013 в 20:08)
 

Пробуем подставить одно длинное слово
$str = 'Вашастрока,которуюнужноурезать';
echo cutStr($str, 20); 

и получаем...
ничего не получаем.

  Ответить  
 
 автор: mihdan   (09.06.2013 в 20:08)   письмо автору
 
   для: liberty   (09.06.2013 в 00:26)
 

Я бы реализовал так, чтобы не резать слова посередине:


<?php
/**
 * Умная обрезка строки
 * @param string $str - исходная строка
 * @param int $lenght - желаемая длина результирующей строки
 * @param string $end - завершение длинной строки
 * @param string $charset - кодировка
 * @param string $token - символ усечения
 * @return string - обрезанная строка
 */
function cutStr($str$lenght 100$end '&nbsp;&hellip;'$charset 'UTF-8'$token '~') {
    
$str strip_tags($str);
    if (
mb_strlen($str$charset) >= $lenght) {
        
$wrap wordwrap($str$lenght$token);
        
$str_cut mb_substr($wrap0mb_strpos($wrap$token0$charset), $charset);   
        return 
$str_cut .= $end;
    } else {
        return 
$str;
    }
}
?>


Из обязательных - первый аргумент. Вызывается как-то так:


<?php
$str 
'Ваша строка, которую нужно урезать';
echo 
cutStr($str);
?>

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 13:37)   письмо автору
 
   для: liberty   (09.06.2013 в 02:58)
 

Эта функция у меня работает, только зачем так извращаться?
Задача очень простая
<?php
function truncate($str$len) {
    if (
strlen($str) > $len) {
        
$cuted substr($str0$len);
        
$pos strrpos($cuted' ');

        if (
$pos !== false)
            return 
substr($cuted0$pos) . '...';
        else
            return 
$cuted '...';
    }
    return 
$str;
}

  Ответить  
 
 автор: liberty   (09.06.2013 в 02:58)   письмо автору
 
   для: DangerBay   (09.06.2013 в 02:33)
 

здесь взял http://stackoverflow.com/questions/972010/shorten-string-in-php-full-words-only
второй вариант.

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 02:33)   письмо автору
 
   для: liberty   (09.06.2013 в 01:27)
 

Остаётся вопрос: а в чём смысл функции?
С виду - образцовый говнокод.

  Ответить  
 
 автор: liberty   (09.06.2013 в 01:27)   письмо автору
 
   для: confirm   (09.06.2013 в 01:14)
 

ну тогда
$text = truncate($text, 30);

но почему идет обрезка после 30 символа?
смысл функции не обрезать слова.

  Ответить  
 
 автор: confirm   (09.06.2013 в 01:14)   письмо автору
 
   для: liberty   (09.06.2013 в 01:04)
 

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

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования