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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: вывод нужного колличства символов
 
 автор: speaker_ya   (05.03.2006 в 12:17)   письмо автору
 
 

Скажите, какой фнукцией можно обрезать вывод колличество выводимых символов/слов из БД?

Я хочу сделать ссылку, под ней маленький кусок текста (около 10-20 слов) и дальше ссылку "читать весь текст..."

   
 
 автор: cheops   (05.03.2006 в 14:02)   письмо автору
 
   для: speaker_ya   (05.03.2006 в 12:17)
 

Можно воспользоваться функцией substr()
<?php
  
// Выводим 100 символов
  
$short substr($text,0,100);
?>

   
 
 автор: Temnovit   (05.03.2006 в 16:36)   письмо автору
 
   для: cheops   (05.03.2006 в 14:02)
 

У такого способа один недостаток - последнее слово может "оборваться на середине" и выйдет не очень красиво. Будет что-то типа "Люблю грозу в начале ма...".

Предлагаю такой способ. Он, конечно, громоздкий и работать будет не слишком быстро, но выведет слова целиком.


<?php
/*$text - исходный текст.
   $arr - массив из слов исходной строки.
   $words - колличество отображаемых слов.
   $shorttext - результирующая строка
  функция explode() разбивает строку, передавая ее "части" в массив, используя в качестве разделителя первый параметр (в нашем случае пробел)
*/
//выведем первые 10 слов
$words 10;

//разбиваем строку на части
$arr explode(" "$text);
$shorttext "";

//если слов в строке было меньше,
//чем нужно вывести, то нет смысла ничего урезать
if ( $words count($arr) )
    
//записываем первые $words слов в новую строку
   
for($i=0$i<$words$i++) 
      
$shorttext .= "$arr[i] ";
else 
   
$shorttext $text;
?>


В переменной $shorttext окажуться первые 10 слов. Обратите внимене что в выражении $shorttext .= "$arr[i] "; после $arr[i] идет пробел. Это необходимо потому, что пробелы служили критерием разбивки для explode() и в массив не попали.

Недостатки
1)Выведуться первые 10 слов независимо от их длинны.
2)Если между каким-то из слов будет 2 пробела, они превратяться в три, а слов будет меньше на одно.
3)Слова между символами перевода строки будут считаться за одно слово.

   
 
 автор: Temnovit   (05.03.2006 в 16:43)   письмо автору
 
   для: cheops   (05.03.2006 в 14:02)
 

Придумал как исправить проблему с двумя пробелами и "заставить" скрипт распознавать перевод строки как разделитель. Вместо exlode() нужно использовать функцию preg_split() (разбивка по регулярному выражению).


$arr = preg_split('/[s+,<br>*<br>]/', $text);

   
Rambler's Top100
вверх

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