我正在编写一个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