在Wordpress中搜索和匹配搜索查询中的一个或多个单词

时间:2019-04-18 09:53:09

标签: php

我正在尝试使搜索结果显示不同的结构,具体取决于搜索中的单词。

我要捕获的单词-appleplumtree,如果搜索到某些单词或全部单词以显示div1,则显示div2。

到目前为止我尝试过的是

    $words_array = explode(' ', $_GET['s']);
    $words = 'apple plum tree';

    if(in_array($words, $words_array)) {      

         echo 'div1';
    } else {
         echo 'div2';
      }

这不起作用,因为当我搜索其中一个单词或它们的组合时,返回div2不起作用。

如果我这样做

    $words_array = explode(' ', $_GET['s']);

    if(in_array('apple', $words_array)) {      

         echo 'div1';
    } else {
         echo 'div2';
      }

并搜索apple将返回正确的结果div1

更新:print_r($words_array);

Array ( [0] => apple [1] => and [2] => tree

print_r($words);

Array ( [0] => apples [1] => apple [2] => tree [3] => plum )

1 个答案:

答案 0 :(得分:1)

in_array()函数要求第一个参数为字符串。

  

in_array(混合$ needle,array $ haystack [,bool $ strict = FALSE])   :布尔

您将数组作为第一个参数传递。

这就是为什么函数未返回正确值的原因。 第二个参数是要搜索的数组。

使用默认的$divOneFlag初始化变量FALSE

请循环$words,然后在循环中调用in_array()

如果找到了单词,请将其设置为TRUE

如果变量为TRUE,则echo 'div1';

其他echo 'div2';

<?php
$words_array = ['apple', 'and', 'tree'];
$words = ['apples', 'apple', 'tree', 'plum'];
$divOneFlag = FALSE;
if (! empty($words)) {
 foreach ($words as $word) {
  if (in_array($word, $words_array)) {
   $divOneFlag = TRUE;
  }
 }
}
if ($divOneFlag) {
 echo 'div1';
}
else {
 echo 'div2';
}

Working Demo: