好的,我现在正在尝试扩展我之前在这里解决的一些代码。下面的这段代码分配了一个输入到搜索框中的短语,并尝试执行以下操作:1)清除我不想要的东西(注意:输入是预处理的,所以我现在只是省略更多,并且仍在这部分工作)。2) 使用空格作为分隔符将短语分成单独的单词 3) 检查提取的每个单独单词以查看前 3 个字符中是否存在 *,如果存在,则中止该过程 4) 检查单词“and”或“或”被使用——如果是这样,不加修改地应用它们——如果不是,那么在短语中插入一个“和”。(如果用户没有自己指定,最终会自动将短语转换为“and”短语)。5) 在整个过程中,
if ($keyword) {
$clean = preg_replace('/[^a-zA-Z0-9 *_&]/','',$keyword);
$token = strtok($clean, " ");
$keyword = $token;
while ($token !== false) {
$pos = stripos($token, "*");
if ($pos < 3 && $pos !== false) {
return;
}
$token = strtok(" ");
if ($token == "and" || $token == "or") {
$keyword = $keyword . " " . $token;
} elseif ($token) {
$keyword = $keyword . " and " . $token;
}
}
echo $keyword;
问题:
一切正常,除了某些原因 ELSEIF 语句总是正确的?!无论我做什么,都会插入一个额外的“和”,无论上面的 if 语句是否为真。我已经验证了最初的 if 语句确实有效,它检测是否存在“和”或“或”并相应地应用它......但随后它继续处理 ELSEIF !我什至尝试过:
elseif ($token !== "and" && $token !== "or" && $token !== false)
但最后,不管怎样,最终的短语都会以'and and's 或'or and's 结尾。
(注意:我意识到有比 preg_replace 更好的选择,但我会在其他时间研究 - 所以对于这个问题,我只是想解决 ELSEIF 困境,谢谢)
APPENDING MODS 基于响应...
所以,我将代码更改为...
$token = strtok(" ");
if (in_array($token, array( 'and', 'or' ))) {
$keyword = $keyword . " " . $token;
} elseif (!empty($token)) {
$keyword = $keyword . " and " . $token;
}
但结果仍然不正确。例如:
“white football helmut”确实变成了“white and football and helmut”,然而……“white and football and helmut”变成了“white and and football and and helmut”。
如果if为真,我只是不明白ifelse如何处理?
注意:为了验证 IF 部分是否正常工作,我在该语句中放置了一个 x:
if (in_array($token, array( 'and', 'or' ))) {
$keyword = $keyword . " x" . $token;
而“white and football and helmut”的结果是“white xand and football xand and helmut”。此外,“white and football helmut”(没有 2nd and)导致“white xand and football and helmut”。!!因此, IF 语句正在按预期处理 - 而不是 ELSEIF !