我正在开发一个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 NAME:package_two”,可以简单地输入“package_two”,甚至可以输入“two”或“tw”。需要多少调整?
另外,我创建了一个变量来将所有结果URL连接到一个字符串,所以如果搜索“package_one”,它将返回两个URL ...我不认为我做的代码是正确的,因为它只产生一个URL。
**我应该提一下,在匹配包名后,它会在“PACKAGE LOCATION:”之后找到下一个字符串。抓取网址
感谢您的任何意见,谢谢!
答案 0 :(得分:2)
在这里,您正在寻找完全匹配:
if (trim($data_file[$i]) === $search) {
您可以使用stripos
查看您的搜索字符串是否显示在以下行中:
if (stripos($data_file[$i], $search) !== FALSE) {
请注意,您需要进行!==
比较,因为stripos
可以评估为0。
答案 1 :(得分:1)
看一下strpos()函数:
if(strpos(trim($data_file[$i],$search) != false)
检查您的搜索字符串(针)是否在大海捞针(您当前的输入行)内。 http://php.net/manual/en/function.strpos.php