Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод нескольки слов из текста...
 
 автор: Dinya_1   (01.11.2008 в 20:57)   письмо автору
 
 

Есть большой текст в базе, требуется вывести с помощью PHP только первую его часть, к примеру первые 5-6 слов.... Кто нибудь делал такое?

  Ответить  
 
 автор: lorenberg   (01.11.2008 в 21:42)   письмо автору
 
   для: Dinya_1   (01.11.2008 в 20:57)
 

Если решите выводить именно словами - больше трудностей возникнет.
Большинство в таком случае выводят определенное количество символов и в конце ставят три точки...

  Ответить  
 
 автор: Гость   (01.11.2008 в 21:51)   письмо автору
 
   для: lorenberg   (01.11.2008 в 21:42)
 

>Если решите выводить именно словами - больше трудностей возникнет.

А в чем трудность обрезать строку по символу пробела?

  Ответить  
 
 автор: lorenberg   (02.11.2008 в 19:56)   письмо автору
 
   для: Гость   (01.11.2008 в 21:51)
 

Хм, точно, не сообразил.. но выводить символы всё равно проще)))

  Ответить  
 
 автор: SDL   (02.11.2008 в 05:02)   письмо автору
 
   для: Dinya_1   (01.11.2008 в 20:57)
 

пишу подробно с комментариями, чтобы понятно было:

// запрос
$qw = mysql_query("SELECT * FROM tname WHERE id=".$id.";");
$result = mysql_fetch_array($qw);

// запускаем strtok()
$word = strtok($result['stroka']," ");

// количество слов (здесь слово - это разделенная пробелом совокупность символов)
$count = 5;
// максимальное количество символов
$max_symbols = 60;

// здесь храним укороченную строку
$str_short = "";

// запускаем поиск. $i < $count, так как одно слово уже найдено
for ($i = 1; $i < $count; $i++)
{
  // если количество символов не превышет допустимого максимума, то добавляем
  //   новое слово. если же превышает, то выходим из цикла
  if (strlen($str_short.$word." ") <= $max_symbols) $str_short = $str_short.$word." ";
  else break;
  // запускаем strtok() только с одним параметром, иначе ф-ия будет находить
  //   одну и ту же часть строки
  $word = strtok(" ");
}

echo $str_short."...";

  Ответить  
 
 автор: Dinya_1   (02.11.2008 в 08:21)   письмо автору
 
   для: SDL   (02.11.2008 в 05:02)
 

Спасибо!

  Ответить  
 
 автор: Dinya_1   (02.11.2008 в 18:49)   письмо автору
 
   для: Dinya_1   (02.11.2008 в 08:21)
 

А если мой запрос идет на вывод последних сообщений, как можно соединить эти два запроса?


 <?php /*Вывод последних 20-ти сообщений*/
$result33 mysql_query("SELECT id,title,gorod FROM forma ORDER BY date DESC, id DESC LIMIT 20",$db);
if (!
$result33)
{
echo 
"<p >Запрос на выборку данных из базы не прошел. Напишите об этом администратору  <br> <strong>Код ошибки:</strong></p>";
exit(
mysql_error());
}
if (
mysql_num_rows($result33) > 0)
{
$myrow33 mysql_fetch_array($result33);
do 
{
printf ("<div style='margin-top:4px;margin-right:4px;margin-left:5px;'><a class='posled' href='pdr2.php?id=%s'>%s<br>%s</a></div>",$myrow33["id"],$myrow33["title"],$myrow33["gorod"]);
}
while (
$myrow33 mysql_fetch_array($result33));
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit();
}
 
?>

  Ответить  
 
 автор: SDL   (03.11.2008 в 02:04)   письмо автору
 
   для: Dinya_1   (02.11.2008 в 18:49)
 

последних 20 сообщений или последних 20 слов строки?

по вопросу с проблемным запросом лучше создай тему в форуме mysql.

  Ответить  
 
 автор: SDL   (03.11.2008 в 21:08)   письмо автору
 
   для: Dinya_1   (02.11.2008 в 18:49)
 

кстати, если вопрос у тебя был, как вывести последние СЛОВА с сообщения, то можно сделать так: сначала инвертируй обрабатываемую строку, потом примени алгоритм (скрипт, который я написал), а потом инвертируй результат. думаю, должно получиться

  Ответить  
 
 автор: Dinya_1   (02.11.2008 в 19:13)   письмо автору
 
   для: SDL   (02.11.2008 в 05:02)
 

У меня пример предложенный SDL, не работает.
Прледложение хранится в таблице forma в графе title, подганяю под свои данные - выдает ошибку при запросе в базу...

  Ответить  
 
 автор: SDL   (03.11.2008 в 01:29)   письмо автору
 
   для: Dinya_1   (02.11.2008 в 19:13)
 

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

а вот остальной код - рабочий. сам проверял.


<?php
// строка, полученная из базы данных
$result "";
for (
$i 1$i <= 100$i++)
$result $result."eshkin kot ";

// запускаем strtok() 
$word strtok($result," "); 

// количество слов (здесь слово - это разделенная пробелом совокупность символов) 
$count 5
// максимальное количество символов 
$max_symbols 60

// здесь храним укороченную строку 
$str_short ""

// запускаем поиск
for ($i 1$i <= $count$i++) 

  
// если количество символов не превышет допустимого максимума, то добавляем 
  //   новое слово. если же превышает, то выходим из цикла 
  
if (strlen($str_short.$word." ") <= $max_symbols$str_short $str_short.$word." "
  else break; 
  
// запускаем strtok() только с одним параметром, иначе ф-ия будет находить 
  //   одну и ту же часть строки 
  
$word strtok(" "); 


echo 
$str_short."...";
?>


ТОЛЬКО ЧТО запустил - код рабочий. ошибка в запросе

  Ответить  
 
 автор: Dinya_1   (03.11.2008 в 20:38)   письмо автору
 
   для: SDL   (03.11.2008 в 01:29)
 

SDL - извени, просто у меня очень мало практики в этом деле...

  Ответить  
 
 автор: SDL   (03.11.2008 в 21:05)   письмо автору
 
   для: Dinya_1   (03.11.2008 в 20:38)
 

хорошо. просто следи за тем, какие ошибки происходят.
если происходит фатальная ошибка, то дальше выполнение кода не идет.

  Ответить  
 
 автор: Dinya_1   (27.11.2008 в 19:41)   письмо автору
 
   для: SDL   (03.11.2008 в 21:05)
 

А как сюдаеще приделать вывод в цикле с помощью - do wile


do
{
echo $str_short."...."; 
}
while (    );



Только не подумайте, что я типа "халявщик"..., просто элементарно неполучается...

  Ответить  
 
 автор: SDL   (06.12.2008 в 03:14)   письмо автору
 
   для: Dinya_1   (27.11.2008 в 19:41)
 

так надо сделать (я код проверил, работает):


<?php 
// строка, полученная из базы данных 
$result ""
for (
$i 1$i <= 10$i++) 
$result $result.$i."eshkin kot "

// запускаем strtok()  
$word strtok($result," ");  

// количество слов (здесь слово - это разделенная пробелом совокупность символов)  
$count 5;  
// максимальное количество символов  
$max_symbols 60;  

do
{
// здесь храним укороченную строку  
$str_short "";  

// запускаем поиск 
for ($i 1$i <= $count$i++)  
{  
  
// если количество символов не превышет допустимого максимума, то добавляем  
  //   новое слово. если же превышает, то выходим из цикла  
  
if (strlen($str_short.$word." ") <= $max_symbols$str_short $str_short.$word." ";  
  else break;  
  
// запускаем strtok() только с одним параметром, иначе ф-ия будет находить  
  //   одну и ту же часть строки  
  
$word strtok(" ");  
}  

echo 
$str_short."...<br>";
}
while (
$word != "")
?>

  Ответить  
 
 автор: mihdan   (29.11.2008 в 14:33)   письмо автору
 
   для: Dinya_1   (01.11.2008 в 20:57)
 

SUBSTRING() при выборке из базы

  Ответить  
 
 автор: xx77   (29.11.2008 в 15:20)   письмо автору
 
   для: mihdan   (29.11.2008 в 14:33)
 

можно и по пробел отрезать, посложнее только запрос получится

<?

$zapros 
'SELECT x_tab.id,
    INSERT( x_tab.mesg, (155 +  LOCATE(\' \', x_tab.mesg, 155)), -1,
       CONCAT(\'<a href="?x='
x_tab.id, \'"> ... Дальше</a>\'))
 FROM x_tab ..............................................................

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования