好吧,我现在试图展开一些我以前在这里解决过的代码。 下面的这段代码指定了一个输入到搜索框中的短语,并尝试执行以下操作: 1)清除我不想在其中的东西(注意:输入是预处理的,所以我只是为了现在,仍然在这部分工作)。 2)用空格作为分隔符将短语分解成单独的单词 3)检查提取的每个单词是否存在于前3个字符中,如果是,则中止处理 4)检查单词“和“或”or“被使用 - 如果是这样,则不加修改地应用它们 - 如果没有,则插入”和“到短语中。 (如果用户没有自己指定,最终会自动将短语转换为“和”短语)。 5)在整个过程中,$关键字被重建,最后我回应最终的新的$关键字来测试结果......当然更多的代码在使用那个新的关键字。PHP Ifelse声明是真实的,无论
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语句总是正确的?无论我做什么,都会插入额外的'and',而不管上面的if语句是否为true。我已经验证了最初的if语句是否有效,它检测'and'或'or'是否存在并相应地应用它......但是,它继续前进并处理ELSEIF!我甚至想尽办法:
elseif ($token !== "and" && $token !== "or" && $token !== false)
但是最终,最终结果是'和和或或'或和,无论如何。
(注:我知道有比preg_replace函数更好的选择,但我会寻找到,在另一个时间 - 所以对于这个问题,我只是试图解决ELSEIF困境,感谢)
追加基于响应MODS ...
于是,我改变了代码...
$token = strtok(" ");
if (in_array($token, array('and', 'or'))) {
$keyword = $keyword . " " . $token;
} elseif (!empty($token)) {
$keyword = $keyword . " and " . $token;
}
但结果仍然不正确。例如:
“白色足球helmut”确实成为“白色和足球和helmut”,然而... “白色和足球和helmut”变成“白色和足球和helmut”。
我只是不明白如果if是真的ifelse可以如何处理?
注意:要验证IF部分的工作,我放置在语句中的X:
if (in_array($token, array('and', 'or'))) {
$keyword = $keyword . " x" . $token;
与“白和足球和赫尔穆特”导致“白色x和和足球x和和赫尔穆特”。此外,“白色和足球helmut”(没有第二和)导致“白色和足球和helmut”。 !所以,IF语句正在按预期处理 - 只是不是ELSEIF!
只是说明一下,我想你可能已经在第二个'/'之前的正则表达式中错过了关闭']'。 – 2011-04-25 16:28:00
好的 - 我在实际的代码中有更多内容,但是由于它是一项正在进行的工作,因此在此消息中删除了大部分内容 - 并意外地删除了这些内容。它现在回到那里;-)谢谢 – Soyo 2011-04-25 16:32:29