【问题标题】:searching through a text file, and display the results?搜索文本文件并显示结果?
【发布时间】:2011-05-05 01:24:19
【问题描述】:

如果从用户那里得到输入,我想在文件中搜索任何结果,并显示结果:

$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 显示文本文件中的行

【问题讨论】:

  • 所以您想在 txt 文件中搜索关键字/短语,如果匹配则显示该行?
  • 没错,感谢@raul 指出

标签: php html search text-search


【解决方案1】:

我什至建议使用 file 命令:

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

读取文件,每行作为数组中的一个元素。从那里,您将迭代每一行(您提到返回文件中匹配的行,这就是我推荐 file(...) 的原因):

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>';
    }
  }
}

仅仅为了重新加入它而爆炸数组是没有用的。您也可以将其爆炸,然后用

将其 implode()。

此外,您的文件似乎包含多行 CSV。如果是这种情况,您可能想要迭代每一行,然后对项目进行explode(...) 并在exploded 变量上执行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) { ... }
}

【讨论】:

  • 谢谢,+1 的帖子,文件命令是什么意思
  • 文件与 fopen,fgets,fclose 相同,但会为您完成所有工作。它需要一个文件并在文件中的每一行加载一个数组。因此,我发现获取一个文件并将其推送到一行中的 $var 更干净(尽管我从未正式测试过性能,但我会 /假设/ [never good to] PHP 打开、解析和 clsoe 文件然后我自己这样做会更快)
【解决方案2】:

你要找的是strpos()

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

返回 haystack 字符串中第一次出现 needle 的数字位置。

以整数形式返回位置。如果没有找到 needle,strpos() 将返回布尔值 FALSE。

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2011-04-08
    相关资源
    最近更新 更多