用于在字符串中进行不敏感的案例搜索,其功能是更快的preg_match()还是stripos()?
<?php
$string = "This is test string";
$result = preg_match('/test/i', $string);
OR
$result = stripos($string, 'test') !== false;
?>
答案 0 :(得分:4)
根据我的经验,stripos更快。
答案 1 :(得分:1)
如果您不需要实际匹配复杂表达式或捕获某些内容,那么只需使用stripos
或strpos
答案 2 :(得分:0)
strpos更快,因为这个函数有预定义规则这个函数必须做什么...在preg_match函数中我们必须从我们这边传递逻辑...所以在这种情况下首先要根据这个定义规则和工作
所以strops更快......
答案 3 :(得分:0)
一些高级搜索技术,如使用mysql或sphinx进行索引全文搜索,对于“密集搜索”问题来说,是一个真正的解决方案。
虽然这些已经效率低下的函数的所有这些微不足道的比较涉及到完全扫描数据都无济于事。
如果你坚持使用它们 - 没有表现出你的担忧。因此 - 不要浪费任何人的时间进行比较。
答案 4 :(得分:0)
stripos
速度慢,比使用strtolower
<{1}}
strpos
以秒为单位的结果
<?php
function loop()
{
$str_50 = str_repeat('a', 50).str_repeat('b', 50);
$str_100 = str_repeat('a', 100).str_repeat('b', 100);
$str_500 = str_repeat('a', 250).str_repeat('b', 250);
$str_1k = str_repeat('a', 1024).str_repeat('b', 1024);
$str_10k = str_repeat('a', 10240).str_repeat('b', 1024);
$str_100k = str_repeat('a', 102400).str_repeat('b', 1024);
$needle = 'b';
header("Content-Type: text/plain");
echo str_replace(',', "\t", 'count,strpos,preg,stripos,preg i,strpos(tolower)').PHP_EOL;
foreach(array($str_50, $str_100, $str_500, $str_1k, $str_10k, $str_100k) as $str)
{
echo strlen($str);
$start = mt();
for($i = 0; $i < 25000; $i++) $j = strpos($str, $needle); // strpos
echo "\t".mt($start);
$regex = '!'.$needle.'!';
$start = mt();
for($i = 0; $i < 25000; $i++) $j = preg_match($regex, $str); // preg
echo "\t".mt($start);
$start = mt();
for($i = 0; $i < 25000; $i++) $j = stripos($str, $needle); // stripos
echo "\t".mt($start);
$regex = '!'.$needle.'!i';
$start = mt();
for($i = 0; $i < 25000; $i++) $j = preg_match($regex, $str); // preg i
echo "\t".mt($start);
$str = strtolower($str);
$start = mt();
for($i = 0; $i < 25000; $i++) $j = strpos($str, $needle); // strtolower strpos
echo "\t".mt($start);
echo PHP_EOL;
}
echo PHP_EOL;
}
function mt($start = null)
{
if($start === null)
return microtime(true);
return number_format(microtime(true)-$start, 4);
}
loop();