PHP:IF语句适用于自己的,而不是内部,而循环
比方说,我有$关键字=句子输入到搜索框中,如“白色大盒子”
我需要做的是将其分解为单个单词,然后测试每个单词以确保*在前三个字母中不出现。 (所以,sen *可以,但se *不会好)。如果*出现在单个单词的前3个字母中,则“if($ keyword)...”过程需要结束。
if ($keyword) {
$token = strtok($keyword, " ");
while ($token != false) {
echo $token;
if (stripos($token,"*") < 3) {
return;
}
$token = strtok(" ");
}
...代码继续...
正如你所看到的,我每次看到它处理呼应。
如果我摆脱了'if'代码,那么它输出'largewhiteboxes',并按预期继续。
如果我按照原样离开'if'代码,只输出'large',并且例程结束 - 即使条件未被满足!
如果我运行的“如果”在其自己的说法,while循环之外,它工作得很好,响应忠实于前3个位置的*,而假的一切......
什么我可能会做错吗?
这种变化似乎有效。
$keyword = "large white boxes";
$token = strtok($keyword, " ");
while ($token !== false) {
echo $token;
$pos = stripos($token, "*");
if ($pos < 3 && $pos !== false) {
return;
}
$token = strtok(" ");
}
有一个giant red warning in the documentation for stripos
,你应该听从。
换句话说,您需要检查返回值是否为!== false
,然后检查它是否为< 3
。
顺便说一句,当你有explode(',', $keyword)
可用时,为什么还要打扰strtok
?
谢谢...实际上,stripos已经在那里工作了...但是它检查整个短语的前3个字符,而不是短语中的单个单词。既然它没有问题,我真的没有看到它的那部分(虽然,我现在会)。当我尝试将它放在WHILE循环中时,我的问题就出现了。我实际上在一开始就使用了爆炸,但是在失败之后以strtok结束...... – Soyo 2011-04-25 00:03:15
strtok实际上非常聪明。如果你有一个非常大的字符串,你不想一次爆炸它,因为无论如何你需要循环strtok是非常有效的。 – Halcyon 2011-04-25 00:31:47
嗯,我希望我和strtok命令一样聪明,然后我想到了这一点;-) ...我试着根据Jon提出的一些变化,但仍然没有运气... – Soyo 2011-04-25 00:50:23
AWESOM E.在最初的测试中,这是工作的;-),我会测试更多当然......我将这个!==假加入并开始在这个方向上塑造......但你来到右边的人进入油漆灌注它!感谢大家对此的投入,我真的很感激! – Soyo 2011-04-25 01:21:34