|
|
|
| Скажите, какой фнукцией можно обрезать вывод колличество выводимых символов/слов из БД?
Я хочу сделать ссылку, под ней маленький кусок текста (около 10-20 слов) и дальше ссылку "читать весь текст..." | |
|
|
|
|
|
|
|
для: speaker_ya
(05.03.2006 в 12:17)
| | Можно воспользоваться функцией substr()
<?php
// Выводим 100 символов
$short = substr($text,0,100);
?>
|
| |
|
|
|
|
|
|
|
для: 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)Слова между символами перевода строки будут считаться за одно слово. | |
|
|
|
|
|
|
|
для: cheops
(05.03.2006 в 14:02)
| | Придумал как исправить проблему с двумя пробелами и "заставить" скрипт распознавать перевод строки как разделитель. Вместо exlode() нужно использовать функцию preg_split() (разбивка по регулярному выражению).
$arr = preg_split('/[s+,<br>*<br>]/', $text);
|
| |
|
|
|