2012-11-09 67 views
1

我試圖在一行上搜索文本文件中的兩個值。如果兩個值都存在,我需要輸出整行。我正在搜索的值可能不是彼此相鄰,這是我卡住的地方。我有以下的代碼效果很好,但只有一個搜索值:PHP爲兩個字符串逐行搜索文本文件,然後輸出行

<?php 
$search = $_REQUEST["search"]; 
// Read from file 
$lines = file('archive.txt'); 
foreach($lines as $line) 
{ 
// Check if the line contains the string we're looking for, and print if it does 
if(strpos($line, $search) !== false) 
echo"<html><title>SEARCH RESULTS FOR: $search</title><font face='Arial'> $line <hr>"; 
} 

?> 

任何援助深表感謝。提前謝謝了。

回答

4

假設你正在尋找一個空格隔開的值,它們都將一直存在,explode應該做的伎倆:

$search = explode(' ', $_REQUEST["search"]); // change ' ' to ',' if you separate the search terms with a comma, etc. 
// Read from file 
$lines = file('archive.txt'); 
foreach($lines as $line) 
{ 
    // Check if the line contains the string we're looking for, and print if it does 
    if(strpos($line, $search[0]) !== false && strpos($line, $search[1] !== false)) { 
     echo"<html><title>SEARCH RESULTS FOR: $search</title><font face='Arial'> $line <hr>"; 
    } 
} 

我會離開你呢添加一些驗證,以確保$search陣列中始終存在兩個元素等。

+2

我在回答中提到'explode()',直到我看到這篇文章(然後我放棄了我的答案,因爲這是一個現貨)我強烈建議使用爆炸比有另一個請求。 – Dave

3

我也更正了HTML代碼。該腳本查找兩個值,$search$search2。它使用stristr()。對於區分大小寫的stristr,請參考strstr()。該腳本將返回包含$search$search2的所有行。

<?php 
$search = $_REQUEST["search"]; 
$search2 = $_REQUEST['search2']; 
// Read from file 
$lines = file('archive.txt'); 
echo"<html><head><title>SEARCH RESULTS FOR: $search</title></head><body>"; 
foreach($lines as $line) 
{ 
// Check if the line contains the string we're looking for, and print if it does 
if(stristr($line,$search) && stristr($line,$search2)) // case insensitive 
    echo "<font face='Arial'> $line </font><hr>"; 
} 
?> 
</body></html> 
+0

非常感謝!我不得不修改下面一行:'code' $ line


「;'code」'line code ='Arial'> $ line
「;'code' to'code' echo' '但它是一種享受!再次感謝 – Martyn

1

只需搜索您的其他值,並使用& &來檢查兩者。

 <?php 
     $search1 = $_REQUEST["search1"]; 
     $search2 = $_REQUEST["search2"]; 
     // Read from file 
     $lines = file('archive.txt'); 
     foreach($lines as $line) 
     { 
      // Check if the line contains the string we're looking for, and print if it does 
      if(strpos($line, $search1) !== false && strpos($line, $search2) !== false) 
      echo"<html><title>SEARCH RESULTS FOR: $search1 and $search2</title><font face='Arial'> $line <hr>"; 
     } 

     ?> 
0

這對我有效。你可以在searchthis aray中定義你喜歡的內容,並且它將用整行顯示。

<?php 
$searchthis = array('1','2','3'); 
$matches = array(); 

$handle = fopen("file_path", "r"); 
if ($handle) 
{ 
while (!feof($handle)) 
{ 
    $buffer = fgets($handle); 

    foreach ($searchthis as $param) { 
    if(strpos($buffer, $param) !== FALSE) 
     $matches[] = $buffer; 
}} 
fclose($handle); 
} 

foreach ($matches as $parts) { 
echo $parts; 
} 
?> 
相關問題