【发布时间】:2017-09-18 14:18:08
【问题描述】:
我有一个名为$data 的变量正在存储大量数据。我知道数据将包含以下单词之一……cheese、crackers 或 fruit。或者,它可能不包含这些词。现在,我正在这样做……
if (strpos($data,"cheese")!==false) $food="cheese";
else if (strpos($data,"crackers")!==false) $food="crackers";
else if (strpos($data,"fruit")!==false) $food="fruit";
else $food=”none”;
因此,如果找到奶酪,则仅搜索一次数据。如果没有找到奶酪,则再次搜索数据,因为它首先寻找奶酪,但没有找到,然后不得不再次搜索以寻找饼干。看到问题了吗?所以,如果没有找到食物,数据最终会被搜索 3 次,然后才最终设置食物变量(我是对的,它是这样工作的吗?)。
我想知道是否有更有效的搜索方式。我想到了一个可能的方法,但我不知道该怎么做…… 如果我像这样同时搜索所有三种食物会怎样……
if (strpos($data,"cheese")!==false or
strpos($data,"crackers")!==false or
strpos($data,"fruit")!==false)
$food=THE WORD THAT WAS FOUND GOES HERE
我希望能够将食物变量设置为找到的值。如果这是可能的,我是否正确地认为这会更快,因为您只搜索数据一次?还是 PHP 仍在搜索 3 次以查找每个项目?甚至可以将食物变量设置为找到的值吗?
【问题讨论】:
-
$data是只包含单词还是包含其他单词? -
您的第二种方式实际上与第一种方式相同,因为它仍然调用
strpos()3 次。你确定做三遍真的有问题吗?速度明显慢吗?如果没有,微优化很少值得费心。 -
您可以尝试使用
preg_match()和(cheese|crackers|fruit)等匹配项,然后检查实际匹配的内容;但我不相信它会更快。
标签: php string variables if-statement search