[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обрезка по словам.
Ramzil_Nixon
Приветствую всех!

У меня появилась такая проблема. Нужно часть текста обрезать и выложить на ссылку, и по ссылке направить на полный текст. Только вырезать надо не по буквам как в substr(), а по словам. Не расскажете в кратце, как это делается?



Спустя 11 минут (16.11.2011 - 23:49) inpost написал(а):
Эфективно - explode , получишь массив smile.gif Да-да, массив снова!
Далее циклом foreach прогоняешь каждый элемент и считаешь, когда доходит подсчет допустим до 60 символов (mb_strlen), останавливаешь foreach, склеиваешь массив это этого ключа - получил то, что тебе надо. Ещё не забудь в конце добавить "..."

Спустя 2 минуты, 8 секунд (16.11.2011 - 23:51) Ramzil_Nixon написал(а):
Щас напишу, проверишь правильность? smile.gif

Спустя 10 минут, 30 секунд (17.11.2011 - 00:01) inpost написал(а):
Выставляй тут, а если не я проверю, так проверят другие.

Спустя 1 минута, 28 секунд (17.11.2011 - 00:03) Ramzil_Nixon написал(а):
inpost
Окей

Спустя 32 минуты, 7 секунд (17.11.2011 - 00:35) Ramzil_Nixon написал(а):
<?php
$text = 'Тут очень большой текст, который сожержит очень много слов. С этого текста надо вырезать 10 слов';
$meslin = explode(' ', $text); // Разбиваем строку
foreach ($meslin as $link)
echo $links = mb_strlen($link);
?>


Тут же он считакет буквы из каждого слова если таак делать <_<

Спустя 7 минут, 29 секунд (17.11.2011 - 00:42) Игорь_Vasinsky написал(а):
mb_strlen - считает символы... эт точно

<?php
$words = 10 //кол-во слов
$text = 'Тут очень большой текст, который сожержит очень много слов. С этого текста надо вырезать 10 слов';
$meslin = explode(' ', $text); // Разбиваем строку

$text = "";
$i=1;
foreach ($meslin as $link)
{
$i++;

$text .=$link." ";

if($i == $words)
break;
}

echo $text;
?>

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

ну ка попробуй...

Спустя 9 минут, 30 секунд (17.11.2011 - 00:52) Ramzil_Nixon написал(а):
Работает. Щас мне надо разобраться, что тут каждая переменная делает :)


<?php
$words = 10 //кол-во слов
$text = 'Тут очень большой текст, который сожержит очень много слов. С этого текста надо вырезать 10 слов'; // Текст для обработки
$meslin = explode(' ', $text); // Разбиваем строку
$text = ""; // Пустая переменная
$i=1; // $i в начале принимает 1. Если принимает 1 то слов на эркане будет только 9 :) надо с нуля начинать :)
foreach ($meslin as $link) // Запускаем цикл
{
$i++; // $i увеличевается на 1 каждый раз

$text .=$link." "; // Это ставляет слово за словом и образует текст.

if($i == $words) // $i равен 10 ти,
break; // останавливаем цикл
}
echo $text; // Выводит на браузер
?>


Все правильно? :) А вот еще один маленький вопрос. я не понял что делает . перед =?

Спустя 2 минуты, 48 секунд (17.11.2011 - 00:55) Игорь_Vasinsky написал(а):
создали пустую переменную (или переменная уже что то содержала)

$text = "";

$text2 = "оппаньки";

- далее я в цикле указал эту переменную, но с .=

при такм варианте присвоения - все данные будут дописыватся, а не переписываться

Спустя 2 минуты, 30 секунд (17.11.2011 - 00:57) Ramzil_Nixon написал(а):
Игорь_Vasinsky, спасибо, надо запомнить, помог очень wink.gif

Спустя 9 минут (17.11.2011 - 01:06) Игорь_Vasinsky написал(а):
постоянно работаю с массивами и эта фишка всегда выручает.... wink.gif

Спустя 2 минуты, 28 секунд (17.11.2011 - 01:09) Игорь_Vasinsky написал(а):
<?php
$words = 10 //кол-во слов
$text = 'Тут очень большой текст, который сожержит очень много слов. С этого текста надо вырезать 10 слов'; // Текст для обработки
$meslin = explode(' ', $text); // Разбиваем строку
$text = ""; // Пустая переменная
$i=1; // нет вроде.. не ошибился... но не проверял
foreach ($meslin as $link) // Запускаем цикл
{
$i++; // $i увеличевается на 1 каждый раз

$text .=$link." "; // Это дополняет каждый раз цикла переменную элементом массива.

if($i == $words) // $i равен 10 ти,
break; // останавливаем цикл
}
echo $text; // Выводит на браузер
?>


всё верно. молодец.

Спустя 6 часов, 35 минут, 32 секунды (17.11.2011 - 07:44) Ramzil_Nixon написал(а):
Цитата (Игорь_Vasinsky @ 16.11.2011 - 22:06)
постоянно работаю с массивами и эта фишка всегда выручает....


Эх, мне бы так хорошо знать rolleyes.gif

Спустя 50 минут, 8 секунд (17.11.2011 - 08:34) twin написал(а):
А ничего, что 9 вместо 10 слов выдаст?

Да и вообще, наворотили - мама не горюй. Для таких целей как раз и придуманы регулярки:
    function clearText($text, $cnt = 5)
{
return preg_replace('#(((.+?)\s){'. $cnt .'}).*#u', '$1', $text);
}

$text = 'Тут очень большой текст, который сожержит очень много слов. С этого текста надо вырезать 10 слов';
echo clearText($text, 10);

Спустя 1 час, 41 минута, 6 секунд (17.11.2011 - 10:15) Игорь_Vasinsky написал(а):
а мы массивы потдягиваем. wink.gif
рано ему ещё регулярки....

Спустя 54 минуты, 56 секунд (17.11.2011 - 11:10) twin написал(а):
Цитата (Игорь_Vasinsky @ 17.11.2011 - 07:15)
а мы массивы потдягиваем. wink.gif
рано ему ещё регулярки....

Ну подтягивать нужно на корректных примерах. Посимвольный анализ на PHP - нонсенс. Лучше не привыкать.

Да и что значит "рано"? Это как, пока плавать не научитесь, воды в бассеин не нальем? biggrin.gif

Спустя 17 минут, 14 секунд (17.11.2011 - 11:27) inpost написал(а):
twin
Да, иначе утонет!

Спустя 9 минут, 3 секунды (17.11.2011 - 11:36) twin написал(а):
Цитата (inpost @ 17.11.2011 - 08:27)
twin
Да, иначе утонет!

Я вот сначала изучил регулярки, и только потом узнал, что это сложно. biggrin.gif
Не так стршен черт, как его малютки.

Спустя 26 минут, 32 секунды (17.11.2011 - 12:03) inpost написал(а):
twin
Аналогичны слова Котерова из его учебника.
"Я хотел показать, как всё это просто с регулярками, а потом, когда уже описание заняло 50 страниц понял, что все же достаточно сложная и объемная тема".

Спустя 13 минут, 35 секунд (17.11.2011 - 12:17) Игорь_Vasinsky написал(а):
Для ТС, кстати такой прием используют и для вывода нескольких строк

echo '<script language="javascript" src="js/jquery.min.js"></script>'
.'<script language="javascript" src="js/navigation.js"></script>';

Спустя 1 минута, 24 секунды (17.11.2011 - 12:18) twin написал(а):
Цитата (inpost @ 17.11.2011 - 09:03)
twin
Аналогичны слова Котерова из его учебника.
"Я хотел показать, как всё это просто с регулярками, а потом, когда уже описание заняло 50 страниц понял, что все же достаточно сложная и объемная тема".

Основы там совсем не сложные. И для такой задачи основ вполне достаточно. Регулярка то наипростейшая. Именно с таких и нужно начинать изучать. На практике.

А полностью я их сам до сих пор не знаю.


_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.