Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP. Как найти ключевое слово и вывести 5 строк от слова вниз?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
topor
Отправлено: 09 Августа, 2016 - 11:31:06
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2016  


Помог: 0 раз(а)




Есть файл с данными записанными каждое с новой строки. Нужно найти в файле слово и вывести еще 5 строк слов.

Example:
просто слово
слово 4
прекрасное слово
нужное слово
большой хобот
тигр
попугай не курит

К примеру ищем слово: большой хобот

Что должно получиться:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <a href="/большой хобот">большой хобот</a>
  2. <a href="/тигр">тигр</a>
  3. <a href="/попугай не курит">попугай не курит</a>
  4. <a href="/просто слово">просто слово</a>
  5. <a href="/слово 4">слово 4</a>


И этот пример должен записаться в файл искомого слова
большой-хобот.txt
 
 Top
andrewkard
Отправлено: 09 Августа, 2016 - 12:00:41
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




В чем сложность?
file — Читает содержимое файла и помещает его в массив.
Конструкция foreach предоставляет простой способ перебора массивов.
strpos — Возвращает позицию первого вхождения подстроки.
(Добавление)
B еще
array_slice — Выбирает срез массива

(Отредактировано автором: 09 Августа, 2016 - 12:01:47)

 
 Top
topor
Отправлено: 09 Августа, 2016 - 14:17:45
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2016  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $file = file("names.txt");
  3. $search = "большой хобот";
  4. $j = 0;
  5. $put = '';
  6. $i = 0;
  7. $k = 0;
  8. foreach($file as $v){
  9.     if($v == $search) {
  10.         $k = $i++;
  11.         $j = $k + 5;//количество строк после искомого слова
  12.     }
  13. $i++;
  14. }
  15. while($k < $j) {
  16.     echo $str_new[$k];
  17.         $put .= "<a href=\"/".$str_new[$k]."\">".$str_new[$k]."</a>\n";
  18.     $k++;
  19. }
  20. $bl = $search;
  21. $bl = str_replace(' ', '-', $bl);
  22. file_put_contents($bl.'.txt', $put);
  23. ?>
  24.  


Почему-то создается пустой файл( Помогите плиз... уже не знаю что делать...
 
 Top
andrewkard
Отправлено: 09 Августа, 2016 - 17:39:11
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




topor пишет:
if($v == $search) {

попробуйте изменить на
 
 Top
topor
Отправлено: 09 Августа, 2016 - 19:48:22
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2016  


Помог: 0 раз(а)




andrewkard пишет:
topor пишет:
if($v == $search) {

попробуйте изменить на


Сделано так,
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $file = file("names.txt");
  3. $search = "test fgd5";
  4. $j = 0;
  5. $put = '';
  6. $i = 0;
  7. $k = 0;
  8. foreach($file as $v){
  9.     if(trim($v) == trim($search)) {
  10.         $k = $i++;
  11.         $j = $k + 5;//количество строк после искомого слова
  12.     }
  13. $i++;
  14. }
  15. while($k < $j) {
  16.     echo $file[$k];
  17.         $sdfsdsd = $file[$k];
  18.         $sdfsdsd = str_replace(' ', '-', $sdfsdsd);
  19.                 $sdfsdsd = str_replace('
  20. ', '', $sdfsdsd);
  21.         $sdddfsdsd = $file[$k];
  22.         $sdddfsdsd = str_replace('
  23. ', '', $sdddfsdsd);
  24.     $put .= "<a href=\"/".$sdfsdsd."\">".$sdddfsdsd."</a>\n";//заменил $str_new на $file
  25.     $k++;
  26. }
  27. $bl = $search;
  28. $bl = str_replace(' ', '-', $bl);
  29. file_put_contents($bl.'.txt', $put);
  30. ?>
  31.  


Единственный минус, но все работает как надо
Содержимое файла names.txt
CODE (htmlphp):
скопировать код в буфер обмена
  1. sdf sdfsd1
  2. test2
  3. sdfsdf sgdf3
  4. sdgdgdfg dgdfgdf4
  5. test fgd5
  6. testdfg dgdfgdf6
  7. dgdfgdf7


Если указать строку поиска test fgd5
То выведет так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <a href="/test+fgd5">test fgd5</a>
  2. <a href="/testdfg+dgdfgdf6">testdfg dgdfgdf6</a>
  3. <a href="/dgdfgdf7">dgdfgdf7</a>
  4. <a href="/"></a>
  5. <a href="/"></a>

То есть если строки кончаются, то не достающие строки должно брать с самого начала.. То есть с перовой строки
Вот так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <a href="/test+fgd5">test fgd5</a>
  2. <a href="/testdfg+dgdfgdf6">testdfg dgdfgdf6</a>
  3. <a href="/dgdfgdf7">dgdfgdf7</a>
  4. <a href="/sdf+sdfsd1">sdf sdfsd1</a>
  5. <a href="/test2">test2</a>
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB