У меня появилась такая проблема. Нужно часть текста обрезать и выложить на ссылку, и по ссылке направить на полный текст. Только вырезать надо не по буквам как в substr(), а по словам. Не расскажете в кратце, как это делается?
Спустя 11 минут (16.11.2011 - 23:49) inpost написал(а):
Эфективно - explode , получишь массив Да-да, массив снова!
Далее циклом foreach прогоняешь каждый элемент и считаешь, когда доходит подсчет допустим до 60 символов (mb_strlen), останавливаешь foreach, склеиваешь массив это этого ключа - получил то, что тебе надо. Ещё не забудь в конце добавить "..."
Далее циклом foreach прогоняешь каждый элемент и считаешь, когда доходит подсчет допустим до 60 символов (mb_strlen), останавливаешь foreach, склеиваешь массив это этого ключа - получил то, что тебе надо. Ещё не забудь в конце добавить "..."
Спустя 2 минуты, 8 секунд (16.11.2011 - 23:51) Ramzil_Nixon написал(а):
Щас напишу, проверишь правильность?
Спустя 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 = "оппаньки";
- далее я в цикле указал эту переменную, но с .=
при такм варианте присвоения - все данные будут дописыватся, а не переписываться
$text = "";
$text2 = "оппаньки";
- далее я в цикле указал эту переменную, но с .=
при такм варианте присвоения - все данные будут дописыватся, а не переписываться
Спустя 2 минуты, 30 секунд (17.11.2011 - 00:57) Ramzil_Nixon написал(а):
Игорь_Vasinsky, спасибо, надо запомнить, помог очень
Спустя 9 минут (17.11.2011 - 01:06) Игорь_Vasinsky написал(а):
постоянно работаю с массивами и эта фишка всегда выручает....
Спустя 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) |
постоянно работаю с массивами и эта фишка всегда выручает.... |
Эх, мне бы так хорошо знать
Спустя 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 написал(а):
а мы массивы потдягиваем.
рано ему ещё регулярки....
рано ему ещё регулярки....
Спустя 54 минуты, 56 секунд (17.11.2011 - 11:10) twin написал(а):
Цитата (Игорь_Vasinsky @ 17.11.2011 - 07:15) |
а мы массивы потдягиваем. рано ему ещё регулярки.... |
Ну подтягивать нужно на корректных примерах. Посимвольный анализ на PHP - нонсенс. Лучше не привыкать.
Да и что значит "рано"? Это как, пока плавать не научитесь, воды в бассеин не нальем?
Спустя 17 минут, 14 секунд (17.11.2011 - 11:27) inpost написал(а):
twin
Да, иначе утонет!
Да, иначе утонет!
Спустя 9 минут, 3 секунды (17.11.2011 - 11:36) twin написал(а):
Цитата (inpost @ 17.11.2011 - 08:27) |
twin Да, иначе утонет! |
Я вот сначала изучил регулярки, и только потом узнал, что это сложно.
Не так стршен черт, как его малютки.
Спустя 26 минут, 32 секунды (17.11.2011 - 12:03) inpost написал(а):
twin
Аналогичны слова Котерова из его учебника.
"Я хотел показать, как всё это просто с регулярками, а потом, когда уже описание заняло 50 страниц понял, что все же достаточно сложная и объемная тема".
Аналогичны слова Котерова из его учебника.
"Я хотел показать, как всё это просто с регулярками, а потом, когда уже описание заняло 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 страниц понял, что все же достаточно сложная и объемная тема". |
Основы там совсем не сложные. И для такой задачи основ вполне достаточно. Регулярка то наипростейшая. Именно с таких и нужно начинать изучать. На практике.
А полностью я их сам до сих пор не знаю.
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...