Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4

Обрезание предложения по заданому количеству символов

07.03.2014, 15:53. Показов 2358. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем)
У меня такой вопрос, не могу решить никак
Есть входная строка, например "bla bla bllllaaaaa lbaaaaa l lva asdasdasd"
Мне нужно обрезать ее по заданому количеству символов (например 20) со следующими условиями:
количество символов считается без пробелов (то есть bla bla это 6 а не 7 ) + в конце добавить "..." . Если нужно обрезать на 20-м символе, а он попал на середину слова, то "..." ставиться после последнего , которое целое (то есть если фразу "bla blaaa" обрезать на 4-м символе, должно бить "bla...")
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2014, 15:53
Ответы с готовыми решениями:

Отсортировать предложения по количеству символов в них
В файле записан текст. Вывести предложения этого текста в порядке возрастания.

Определить сложность каждого предложения и всего текста по количеству слов и количеству знаков препинания
ТЗ: Определить сложность каждого предложения и всего текста по количеству слов и количеству знаков препинания. Сложность всего текста...

Обрезание лишних символов
Всем привет! На сайте есть форма, в которой имеется поле "цена". В базе MySql этому полю соответствует тип данных INT. Если ввести...

5
 Аватар для amadey18
92 / 92 / 51
Регистрация: 29.04.2013
Сообщений: 361
07.03.2014, 16:00
PHP
1
2
3
4
5
6
function cutString($string, $maxlen, $encoding = 'utf-8') 
{
    $len = (mb_strlen($string, $encoding) > $maxlen) ? mb_strripos(mb_substr($string, 0, $maxlen, $encoding), ' ', 0, $encoding) : $maxlen;
    $cutStr = mb_substr($string, 0, $len, $encoding);
    return (mb_strlen($string, $encoding) > $maxlen) ? $cutStr.'...' : $cutStr;
};
1
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4
07.03.2014, 16:52  [ТС]
Код работает, но не совсем так как надо(. Учитываются пробели между словами в количество максимальных символов. А они не должны.
0
 Аватар для amadey18
92 / 92 / 51
Регистрация: 29.04.2013
Сообщений: 361
11.03.2014, 11:23
обрезает по необходимой длине, а вот на счет того что бы не учитывал пробелы нужно подумать.
PHP
1
2
3
4
5
6
7
8
9
10
11
function cutString($string, $maxlen, $encoding = 'utf-8') 
{
    $cutStr = mb_substr($string, 0, $maxlen, $encoding);
    return (mb_strlen($string, $encoding) > $maxlen) ? $cutStr.'...' : $cutStr;
};
 
$ggg = "Привет мир!";
echo $ggg."<br />";
echo cutString($ggg, 1); // П...
 
echo cutString($ggg, 4); // Прив...
Добавлено через 1 час 16 минут
Без учета пробелов. Немного бредовенько работает, туда бы еще цикл загнать для проверки пробелов.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function cutString($string, $maxlen, $encoding = 'utf-8') 
{
    $cutStr = mb_substr($string, 0, $maxlen, $encoding); // берем всю строку с пробелами
    $count_space = substr_count($cutStr, ' ');  // считаем пробелы
    $len = $maxlen + $count_space; // длина обрезки + количество пробелов
    if($len > mb_strlen($string, $encoding)) // если длина больше строки то
        $len = mb_strlen($string, $encoding);   // длина будет равна длине самой строки
    else 
        $len = $maxlen + $count_space; // иначе длина обрезки + количество пробелов 
    $cutStr = mb_substr($string, 0, $len, $encoding); // теперь обрезаем строку по найденной длине без учета пробелов
    return (mb_strlen($string, $encoding) > $len) ? $cutStr.'...' : $cutStr; // вернуть строку
};
 
$ggg = "Привет мир! И Все Остальные!";
 
echo $ggg."<br />";
echo cutString($ggg, 23); // Привет мир! И Все Остальные...
echo cutString($ggg, 7); // Привет м...
0
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
11.03.2014, 14:25
Вы имеете ввиду так, или Я неправильно понял ТЗ?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function words_count($f_text, $limit = 3) {
$f_text = strip_tags($f_text);
$word = explode(' ', $f_text);
if ($limit < 1 || sizeof($word) <= $limit) { // если длина меньше или равна - ничего не делаем
return $f_text;
}
$word = array_slice($word, 0, $limit);
$out = implode(' ', $word);
return $out.' ...';
}
echo words_count('Привет мир! И Все Остальные!', 3);
// Результат: Привет мир! И ...
?>
1
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4
11.03.2014, 17:16  [ТС]
Код работает немного не так, как я хотел. Надо обрезать фразу после заданного количество символов. Количество символов считается без пробелов (то есть у фразе Hello World это 10 а не 11 ). И потом, если заданное количество попадает на середину слова, то оно не должно обрезаться (то есть если у Hello World задать обрезание до 5 символов, то должно быть не Hello W... а Hello...). Но , я уже придумал решение. Оно оказалось очень простым:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$str = "Test product with a very long name so that it goes on to more than one line";
$number_of_chars = 22;
$result_string = cut($str, $number_of_chars);
 
function cut($str, $number_of_chars, $symbols = '...') {
    $string_array = explode(" ", $str);
    $out = "";
    foreach ($string_array as $item){
        $out+= strlen($item);
        if($out < $number_of_chars){
            $new_array[] = $item;
        }else{
            break;
        }
        }
        $new_string = implode(" ", $new_array);
        return $new_string.$symbols;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2014, 17:16
Помогаю со студенческими работами здесь

Обрезание нулевых символов у строки
Интересуюсь, как быстрее и проще отбросить нулевые символы в конце строки, полученной из массива байтов: ... NetworkStream ns =...

Обрезание строки без лишних символов
И снова вынужден обратиться за помощью. Есть такая задача, обрезать строку до определённой длины. Дела это с помощью substr Всё...

Ввести предложения. Вывести слова предложения, чередуя уровне яркости символов
Ввести предложения. Вывести слова предложения, чередуя уровне яркости символов. Спасибо за Внимание !

Изменить название формы на первые 10 символов из предложения, введенного пользователем. Эти же 10 символов сохранить в файл «Заголовок.txt»
3. Изменить название формы на первые 10 символов из предложения, введенного пользователем. Эти же 10 символов сохранить в файл...

Сортировка по количеству символов в стобце
Сортировка или фильтрация Возможно ли в Excel 2003 отобразить в строке только значения, в которых количество символов больше, к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru