2015-08-11 2 views
3

Я знаю, что есть несколько других ответов на это, но они не подходят для кода, который у меня есть. Поскольку код, который у меня есть, должен обрабатывать 1000 строк + для каждого поиска.Поиск нескольких строк в одном файле txt

Я хочу объединить строки из 2 входов, поэтому PHP-скрипт ищет как в файлах txt, так и объединяет их при выводе.

Это то, что я пробовал:

$search = $_GET["search"]; 
$search2 = $_GET['search2']; 
$logfile = $_GET['logfile']; 


// Read from file 
$file = fopen($logfile, "r");?> 
<head><title>Searching: <?php echo $search ?></title></head> 
<?php 
while(($line = fgets($file) && $line2 = fgets($file))!= false) 
{ if (stristr($line, $search)) { } if (stristr($line2, $search2)) { } 

?><font face='Arial'> <?php $lines = $line + line2; ?><?php echo $lines ?></font><hr><p><?php 
} 

Когда я запускаю этот код как поиск и Search2 заполнены: Я получаю этот выход:

1 
1 
1 
1 
1 
1 

И те 1, кажется бесконечным. Надеюсь, у кого-то есть решение.

Выходы должны быть для обеих строк: поиск = 'новый'

He is a new player 
Gambling is a new sport 
New is better than old 

Search2 = 'сайт'

It is a nice website 
The website is down 
The FIFA website is being built 

правый выход должен быть:

He is a new player 
It is a nice website 
Gambling is a new sport 
The FIFA website is being built 
New is better than old 

Спасибо за чтение.

~ Conner

+1

Не могли бы вы дать некоторые примеры того, что вывод, который вы ожидаете, и какие входные/параметры должны генерировать этот вывод? – Oldskool

+0

Я отредактировал мое сообщение. – Conner

+0

Неужели у вас есть два 'fgets()' чтения в две разные переменные? И почему бы не искать один регулярный поиск, например '(new | website)'? – holroy

ответ

3
<?php 
$search1 = "value 1"; 
$search2 = "value 2"; 

$lines = file('my_file.txt'); 

foreach($lines as $line) 
{ 
    if(stristr($line,$search1) || stristr($line,$search2)) 

     echo " $line <br>"; 
} 
?> 

Пожалуйста, смотрите, если этот код работает. Это даст вам строки, в которых $search1или$search2. Спасибо :)

+0

Работает как очарование, огромное спасибо! – Conner

1

Вы можете попробовать что-то вроде этого:

foreach (new SplFileObject($logfile) as $lineNumber => $lineContent) { 
    if(strpos($lineContent, $search) !== false 
     || strpos($lineContent, $search2) !== false 
    ) { 
     echo $lineContent . '<br />'; 
    } 
} 
Смежные вопросы