Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Вывод текста по колличеству слов PHP (http://forum.oszone.net/showthread.php?t=42236)

Ginger 08-12-2004 16:42 278727

Вывод текста по колличеству слов PHP
 
Нужна функция, которая бы брала целый текст и делила его по колличеству слов.
нужно для разбивки статей по страницам.
php

vadimiron 08-12-2004 20:24 278776

Самое первое и простое, что пришло в голову, так это загонять каждое слово (знак препинания, идущий после определённого слова, относиться к этому слову) в элементы массива (в качестве разделителя выступает пробел), а потом выводить друг за другом нужное количество элементов массива

То есть, примерно так

PHP код:

function write_text($string,$limit,$page)
 
{
 
$page--;
 
$data=explode(" ",$string);
 
$text_array=array_chunk($data,$limit);
 
$text_to_show=implode(" ",$text_array[$page]);
 
echo 
$text_to_show;


Параметры функции:

$string-строка с текстом

$limit-сколько слов выводить

$page-номер страницы (начиная с 1)

Vlad Drakula 08-12-2004 21:35 278799

Ginger
если ты собираешься так делать статьи, то так нельзя!!!
ты можешь раскинуть на разные страницы один обзац или один лист....
делить надо с логикой!!!!

Ginger 09-12-2004 01:16 278823

Vlad Drakula
ну а где конкретное предложение с логикой?

vadimiron
в принципе можно выводить по колличеству пробелов, но если текст делался, например, в дримвивере, то там может быть куча пробелов..

мне нужна функция которая бы определяла слово от пробела до пробела, когда между ними символы текста.

массив не очень...

Vlad Drakula 09-12-2004 01:23 278826

Ginger
статьи писать в XML уже с разбиением на страницы.

Ginger 09-12-2004 01:26 278827

Vlad Drakula
статьи уже забиты в mysql

mar 09-12-2004 01:38 278831

Ginger
мои 5 копеек к предложению vadimiron - если бывает > 1 пробела, то потом каждое получившееся в результате explode "слово" еще и trim-нуть :)

Vlad Drakula
В принципе я не вижу криминала в этом подходе. Любой текстовый редактор по дефолту тоже абзацы и фразы рубит. Главное не слова ;) Ничего особенного в этом нет. И психологически привычно - в книгах же, в общем, так же бывает.

Ginger 09-12-2004 03:01 278836

mar
не погоди.. если я его тримну, так потом все слова будет слиты при выводе =)

можно с начала заменить все 2-ые пробелы на один в цикле пока пробелов не бедет по одному... потом загнать в массив и выдувать по колличеству...
так.. это можно попробовать =)))
спасибо всем.

если есть ещё предложения, желательно с кодом, please.

vadimiron 09-12-2004 05:13 278842

Вот так с тримом

PHP код:

function write_text($string,$limit,$page

$page--; 
$data=explode(" ",$string); 
$text_array=array_chunk($data,$limit);
foreach(
$text_array[$page] as $v$v=trim($v); 
$text_to_show=implode(" ",$text_array[$page]); 
echo 
$text_to_show;


И тогда между словами точно только один пробел будет

archy 09-12-2004 12:06 278910

Может как нить так
PHP код:

$br_page="##new_page##";
$pages=explode($br_pagewordwrap($text$width$br_page)); 


Vlad Drakula 09-12-2004 15:50 278961

mar

было:
PHP код:

<i>
<
li</li>
<
li</li>
<
li</li>
<
li</li>
<
li</li>
</
i

стало:
PHP код:

<i>
<
li</li>
<
li</li>
<
li

PHP код:

</li>
<
li</li>
<
li</li>
</
i

и это ты считаешь нормальным???

Vlad Drakula 09-12-2004 15:56 278962

archy
не плохая мысль...

mar
а зачем применять trim, достаточно убить пустые строки!
а если там стоит тег <pre> ?

Ginger 09-12-2004 16:33 278970

archy
мысль не плохая, но мне так не подходет.
текст УЖЕ есть. всё.
нужно посчитать слова, выдать 1000 на страницу.
массивы не подходят, потому что они могут разбить хтмл таги в тексте.
как Vlad Drakula уже продемонстрировал.

Vlad Drakula 09-12-2004 17:11 278977

Ginger

сколько не думал так и не смог ридумать ничего кроме того что предложил - archy
т.е. рузное разбитие...

vadimiron 09-12-2004 17:15 278978

Ginger
Я думал, у тебя простой текст, без ХТМЛ тегов. С ними сложнее.
Есть такая мысль: делить по предложениям, то есть сначало подсчитать нужное количество слов, потом от этого места (где находится последнее слово для вывода на данную страницу) искать самую близжайшую точку, то есть конец предложения.
Логика такова: если есть оформление с помощью тегов ХТМЛ, то оно распространяется на слова внутри одно предложения, то есть нет тегов, оформляющих несколько предложений.
А слова надо искать между > и <, то вне тегов
Примерный код напишу попозже, часов через 7, сейчас надо учиться

Ginger 09-12-2004 17:37 278985

vadimiron
у меня тоже завтра егзам по жава. так что позже обдумаю.
первое, что пришло в голову по твоему предложению - в тексте не будет никаких хтмл тагов кроме - <br><u><i><b><ul><ol><li><a><img>
загвоздка в том, что в лист <ul><ol><li> могут быть точки ...

mar 09-12-2004 18:30 278991

пардон - я тоже почему-то думала просто о тексте (без тегов).

Ginger 09-12-2004 18:40 278992

mar и все
sorry, я вас запутала немного...

archy 10-12-2004 09:38 279124

Ginger
Если есть теги, то универсальным способом не решить эту проблему... Либо нужно нормализовать html (убрать лишние пробелы...), потом извращаться с regexp, чтобы не рубить на страницу внутри тега... Вообщем нужно хранить страницы в плейн-текст со своей ограниченной разметкой...

Ginger 10-12-2004 11:59 279193

Ладно, народ, спасибо что вы такой отзывчивый =)
я решали всё же заставить юзера вставлять спец теги в местах перелома статьи на страницы, потом просто их искать и разбивать.. так проще всего..


Время: 14:39.

Время: 14:39.
© OSzone.net 2001-