2010-11-04 74 views
2

如果獲得來自用戶的輸入,我想搜索的任何結果的文件,並顯示結果:搜索文本文件,並顯示結果?

$searchValue = $_POST['search']; 

$handle = @fopen("home.txt","r"); 
# read line by line 
while (($buffer = fgets($handle, 4096)) !== false && // the condtion for the $searchValue) { 
    echo '<tr>'; 
     $array = explode(',', $buffer); 
    foreach($array as $val){ 
     echo '<td>'.$val.'</td>';  
     } 
    echo '</tr>';  
} 

我天璣得到什麼我必須做的,我只是想顯示的行與培訓相關$ searchvalues

+0

因此,您想要搜索txt文件中的關鍵字/短語,並在出現匹配時顯示該行嗎? – Ruel 2010-11-04 13:05:13

+0

是的,謝謝@raul指出它 – getaway 2010-11-04 13:10:02

回答

1

我甚至會建議使用文件命令:

array file (string $filename [, int $flags = 0 [, resource $context ]]) 

讀取一個文件中的每一行與陣列中的元素。從那裏,你會遍歷每一行(你提到的匹配文件這就是爲什麼我建議文件(...在返回行)):

if (($fileLines = file('home.txt')) !== false) 
{ 
    foreach ($fileLines as $line) 
    { 
    if (strpos($line, $searchVal) !== false) 
    { // match found 
     echo '<tr><td>'.str_replace(',','</td><td>',trim($line)).'</td></tr>'; 
    } 
    } 
} 

沒有使用的爆炸剛陣再次重新加入。您也可以爆炸它,然後用</td > <td>也爆炸()。

此外,它似乎像您的文件有CSV行。如果是這樣的話,你可能需要遍歷每一行,然後爆炸(...)項目,並在爆炸變量上執行in_array(...)(或重複遍歷strpos部分匹配)。例如:

$values = explode(',',$line); 
// array search (while entries) 
if (in_array($searchVal,$values)) { ... } 
// array search with partial matches 
foreach ($values as $val) { 
    if (strpos($val,$searchVal) !== false) { ... } 
} 
+0

謝謝,對於後+1,你是什麼意思的文件命令 – getaway 2010-11-04 14:15:55

+0

文件是一樣的fopen,fgets,fclose,但都做爲你工作。它需要一個文件並在文件中加載一個包含每行的數組。然後,我發現把文件放到一行中並將其推送到$ var變得更加簡潔(儘管我從未正式測試過性能,我會/假設/ [從來沒有]] PHP打開,解析和克服文件然後自己這樣做會更快) – 2010-11-04 18:18:54

0

你要尋找的文本文件是strpos()

int strpos (string $haystack , mixed $needle [, int $offset = 0 ]) 

返回針在草堆字符串中第一次出現的數字位置。

以整數形式返回位置。如果找不到指針,則strpos()將返回布爾值FALSE。

+0

哇,我沒有真的得到那 – getaway 2010-11-04 13:23:39