我正在尝试使搜索结果显示不同的结构,具体取决于搜索中的单词。
我要捕获的单词-apple
,plum
,tree
,如果搜索到某些单词或全部单词以显示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 )
答案 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';
}