在文本文件中搜索关键字


Searching for a keyword in a text file

我正在编写一个PHP搜索脚本,该脚本扫描网站上的包的文本文件存储库,并返回每个匹配的URL。文本文件如下所示:

PACKAGE NAME: package_one
PACKAGE LOCATION: ./package_one
PACKAGE VERSION: 0.1.2
PACKAGE NAME: package_two
PACKAGE LOCATION: ./package_two
PACKAGE VERSION: 0.2.1
PACKAGE NAME: package_three
PACKAGE LOCATION: ./package_three
PACKAGE VERSION: 1.3.4
PACKAGE NAME: package_one
PACKAGE LOCATION: ./package_one
PACKAGE VERSION: 0.1.2

我的搜索脚本目前如下所示:

<?
$search = $_POST['search']; //Passed from a user input form
$data_file = file('http://www.example.com/data_file.txt'); //The text file repository
    $final_concatenated_results = "";
    for ($i = 0, $found = FALSE; isset($data_file[$i]); $i++) {
        if (trim($data_file[$i]) === $search) { 
        $cleanse = trim($data_file[++$i]);
        $output_part_one = strstr($cleanse, '.');
        $output_part_two = "http://www.example.com/packages_repository/".$output_part_one;
        $add_this = "<a href='$output_part_two'>$output_part_two</a>"."<br/>";
        $found = TRUE;
        $final_concatenated_results.=$add_this;
    } }
    if ($found == TRUE) {
        echo $final_results;
    }
    if ($found == FALSE) {
        echo "Error, package not found.";
    }
?>

例如,如果逐字逐句地键入"PACKAGE NAME:PACKAGE_two",这将是输出——http://www.example.com/packages_repository/./package_one这很好用。

理想情况下,我想知道如何更改我的代码,这样就可以简单地键入"PACKAGE_two",甚至像"two"或"tw"这样的代码,而不是键入"PACKAGE NAME:PACKAGE_two"。这需要多少调整?

此外,我制作了一个变量,将所有生成的URL连接到一个字符串中,因此如果搜索"package_one",它将返回两个URL。。。我认为我的代码做得不对,因为它只生成一个URL。

**我应该提到的是,在包名称匹配后,它会立即找到"包位置:."后面的下一个字符串来获取URL

感谢您的任何意见!

这里您正在寻找一个完全匹配的:

if (trim($data_file[$i]) === $search) { 

您可以使用stripos查看您的搜索字符串是否出现在以下行中:

if (stripos($data_file[$i], $search) !== FALSE) {

请注意,您需要!==比较,因为stripos可以计算为0。

看看strpos()函数:

if(strpos(trim($data_file[$i],$search) != false)

它检查你的搜索字符串(指针)是否在草堆(你当前的输入行)中。http://php.net/manual/en/function.strpos.php