Показать полную графическую версию : Вывод текста по колличеству слов PHP
Нужна функция, которая бы брала целый текст и делила его по колличеству слов.
нужно для разбивки статей по страницам.
php
vadimiron
08-12-2004, 20:24
Самое первое и простое, что пришло в голову, так это загонять каждое слово (знак препинания, идущий после определённого слова, относиться к этому слову) в элементы массива (в качестве разделителя выступает пробел), а потом выводить друг за другом нужное количество элементов массива
То есть, примерно так
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
Ginger
если ты собираешься так делать статьи, то так нельзя!!!
ты можешь раскинуть на разные страницы один обзац или один лист....
делить надо с логикой!!!!
Vlad Drakula
ну а где конкретное предложение с логикой?
vadimiron
в принципе можно выводить по колличеству пробелов, но если текст делался, например, в дримвивере, то там может быть куча пробелов..
мне нужна функция которая бы определяла слово от пробела до пробела, когда между ними символы текста.
массив не очень...
Vlad Drakula
09-12-2004, 01:23
Ginger
статьи писать в XML уже с разбиением на страницы.
Vlad Drakula
статьи уже забиты в mysql
Ginger
мои 5 копеек к предложению vadimiron - если бывает > 1 пробела, то потом каждое получившееся в результате explode "слово" еще и trim-нуть :)
Vlad Drakula
В принципе я не вижу криминала в этом подходе. Любой текстовый редактор по дефолту тоже абзацы и фразы рубит. Главное не слова ;) Ничего особенного в этом нет. И психологически привычно - в книгах же, в общем, так же бывает.
mar
не погоди.. если я его тримну, так потом все слова будет слиты при выводе =)
можно с начала заменить все 2-ые пробелы на один в цикле пока пробелов не бедет по одному... потом загнать в массив и выдувать по колличеству...
так.. это можно попробовать =)))
спасибо всем.
если есть ещё предложения, желательно с кодом, please.
vadimiron
09-12-2004, 05:13
Вот так с тримом
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;
}
И тогда между словами точно только один пробел будет
Может как нить так
$br_page="##new_page##";
$pages=explode($br_page, wordwrap($text, $width, $br_page));
Vlad Drakula
09-12-2004, 15:50
mar
было:
<i>
<li> 1 </li>
<li> 2 </li>
<li> 3 </li>
<li> 4 </li>
<li> 5 </li>
</i>
стало:
<i>
<li> 1 </li>
<li> 2 </li>
<li>
3 </li>
<li> 4 </li>
<li> 5 </li>
</i>
и это ты считаешь нормальным???
Vlad Drakula
09-12-2004, 15:56
archy
не плохая мысль...
mar
а зачем применять trim, достаточно убить пустые строки!
а если там стоит тег <pre> ?
archy
мысль не плохая, но мне так не подходет.
текст УЖЕ есть. всё.
нужно посчитать слова, выдать 1000 на страницу.
массивы не подходят, потому что они могут разбить хтмл таги в тексте.
как Vlad Drakula уже продемонстрировал.
Vlad Drakula
09-12-2004, 17:11
Ginger
сколько не думал так и не смог ридумать ничего кроме того что предложил - archy
т.е. рузное разбитие...
vadimiron
09-12-2004, 17:15
Ginger
Я думал, у тебя простой текст, без ХТМЛ тегов. С ними сложнее.
Есть такая мысль: делить по предложениям, то есть сначало подсчитать нужное количество слов, потом от этого места (где находится последнее слово для вывода на данную страницу) искать самую близжайшую точку, то есть конец предложения.
Логика такова: если есть оформление с помощью тегов ХТМЛ, то оно распространяется на слова внутри одно предложения, то есть нет тегов, оформляющих несколько предложений.
А слова надо искать между > и <, то вне тегов
Примерный код напишу попозже, часов через 7, сейчас надо учиться
vadimiron
у меня тоже завтра егзам по жава. так что позже обдумаю.
первое, что пришло в голову по твоему предложению - в тексте не будет никаких хтмл тагов кроме - <br><u><i><b><ul><ol><li><a><img>
загвоздка в том, что в лист <ul><ol><li> могут быть точки ...
пардон - я тоже почему-то думала просто о тексте (без тегов).
mar и все
sorry, я вас запутала немного...
Ginger
Если есть теги, то универсальным способом не решить эту проблему... Либо нужно нормализовать html (убрать лишние пробелы...), потом извращаться с regexp, чтобы не рубить на страницу внутри тега... Вообщем нужно хранить страницы в плейн-текст со своей ограниченной разметкой...
Ладно, народ, спасибо что вы такой отзывчивый =)
я решали всё же заставить юзера вставлять спец теги в местах перелома статьи на страницы, потом просто их искать и разбивать.. так проще всего..
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.