2010-11-04 36 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