检查PHP中的循环中是否有任何数组元素长度小于2个字符

时间:2017-04-05 00:02:33

标签: php arrays database search

我正在为数据库创建一个搜索引擎,并意识到数字或简短的单词会使搜索陷入困境。

引擎工作,以便将句子分成单词,并将每个单词放入名为$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
}

它接缝就像它不会输出任何文件,包括两个单词。基本上没有显示任何文件。双循环使得检查数组长度变得复杂。任何线索如何让这个工作?

2 个答案:

答案 0 :(得分:0)

嗯,你需要照顾的第一点是:

$search = $_GET['q'];

除了您确定100%关于输入的安全性之外,您应该对其进行消毒。

然后我会检查:

if (strlen($searches[$i]) <= 2) {

实际上,只有当你的单词有最多2个字符时,你才会做某事。

答案 1 :(得分:0)

我没有让它工作的原因是因为这段代码写得不正确: if(($ searching [$ q]!= $ keyword)&amp;&amp;(strripos($ title,$ keyword)!= false)&amp;&amp;(strripos($ title,$ searching [$ q])!= false)){ 忘了放!==而不是!=。因此,将代码修复为此将起作用: if(($ searching [$ q]!= $ keyword)&amp;&amp;(strripos($ title,$ keyword)!== false)&amp;&amp;(strripos($ title,$ searching [$ q])! == false)){