根据PHP手册,yes- strpos()是确定一个字符串是否包含另一个字符串的最快方法.
Note:
If you only want to determine if a particular needle occurs within haystack,
use the faster and less memory intensive function strpos() instead.
这是引用的时间和任何php.net文章关于其他字符串比较器(我从strstr()中拉出一个)
虽然你的声明应该有两个改变.
if (strpos($storage->getMessage($i),'chocolate') !== FALSE)
这是因为如果(0)计算为false(因此不运行),则如果针位于干草堆的最开始(位置0),则strpos()可返回0.此外,删除htmlentities()将使您的代码运行更快.所有这些htmlentities()都是用相应的HTML等价物替换某些字符.例如,它代替每个&与& amp; amp;
您可以想像,单独检查字符串中的每个字符,并替换其中的许多字符是非常内存和处理器.不仅如此,如果您打算进行文字比较,则不必要.例如,比较以下语句:
strpos('Billy & Sally', '&'); // 6
strpos('Billy & Sally', '&'); // 6
strpos('Billy & Sally', 'S'); // 8
strpos('Billy & Sally', 'S') // 12
或者,在更极端的情况下,甚至可能导致一些真实的评估为假.
strpos('
strpos('<img src...','
为了规避这个问题,你最终会使用更多的HTML实体.
strpos('<img src...', '<'); // 0
但是,你可以想象,这不仅是令人厌烦的代码,而且是多余的.你最好完全排除HTML实体.通常HTML实体仅在输出文本时使用.不比较