我正在为数据库创建一个搜索引擎,并意识到数字或简短的单词会使搜索陷入困境。
引擎工作,以便将句子分成单词,并将每个单词放入名为$searches
的数组中。
创建混乱的搜索示例如下所示:
database info 3
每个单词都会在任何地方查找并显示它是否匹配搜索1和2,1和3,或2和3.问题是,通过搜索“3”,它会造成混乱。因为有很多东西只包含一个字符。
所以我想知道如何检查数组中所有内容的长度,并正确循环。
这是我到目前为止的代码(不完整):
$search = $_GET['q']; //Search string
$count = 0; //Counter
$searches = explode(' ', $search); //Creates the array
for ($i = 0; $i < count($searches); $i++) { //Loop for each element in array
if (strlen($searches[$i]) <= 2) { //if it finds an element less than 2 characters
$keyword = $searches[$i]; //remember key word
foreach (glob('database/*/*/*.txt') as $path) { //Look through database
$title = basename($path, ".txt").PHP_EOL; //Get file instead of path
for ($q=0; $q < count($searches); $q++) { //Another loop in case keyword comes last (which it does)
if (($searches[$q] != $keyword) && (strripos($title,$keyword) != false) && (strripos($title,$searches[$q]) != false)) { //check if if keyword is not equal to itself while searching and tries to find a file with a combination of keyword and $searches[$q].
echo $title . '<br>'; //Gives output
$count += 1;
}
}
}
}
}
if($count == 0) {
echo 'NOTHING'; //Nothing
}
它接缝就像它不会输出任何文件,包括两个单词。基本上没有显示任何文件。双循环使得检查数组长度变得复杂。任何线索如何让这个工作?
答案 0 :(得分:0)
嗯,你需要照顾的第一点是:
$search = $_GET['q'];
除了您确定100%关于输入的安全性之外,您应该对其进行消毒。
然后我会检查:
if (strlen($searches[$i]) <= 2) {
实际上,只有当你的单词有最多2个字符时,你才会做某事。
答案 1 :(得分:0)