php 判断以字符开头,如何在PHP中检查字符串是否以“ _”开头?

由于有人提到效率,出于好奇,我已经对到目前为止给出的功能进行了基准测试:

function startsWith1($str, $char) {

return strpos($str, $char) === 0;

}

function startsWith2($str, $char) {

return stripos($str, $char) === 0;

}

function startsWith3($str, $char) {

return substr($str, 0, 1) === $char;

}

function startsWith4($str, $char){

return $str[0] === $char;

}

function startsWith5($str, $char){

return (bool) preg_match('/^' . $char . '/', $str);

}

function startsWith6($str, $char) {

if (is_null($encoding)) $encoding = mb_internal_encoding();

return mb_substr($str, 0, mb_strlen($char, $encoding), $encoding) === $char;

}

这是我每台平均运行100.000次的DualCore计算机上的结果

// Testing '_string'

startsWith1 took 0.385906934738

startsWith2 took 0.457293987274

startsWith3 took 0.412894964218

startsWith4 took 0.366240024567

startsWith5 took 0.642996072769

startsWith6 took 1.39859509468

// Tested "string"

startsWith1 took 0.384965896606

startsWith2 took 0.445554971695

startsWith3 took 0.42377281189

startsWith4 took 0.373164176941

startsWith5 took 0.630424022675

startsWith6 took 1.40699005127

// Tested 1000 char random string [a-z0-9]

startsWith1 took 0.430691003799

startsWith2 took 4.447286129

startsWith3 took 0.413349866867

startsWith4 took 0.368592977524

startsWith5 took 0.627470016479

startsWith6 took 1.40957403183

// Tested 1000 char random string [a-z0-9] with '_' prefix

startsWith1 took 0.384054899216

startsWith2 took 4.41522812843

startsWith3 took 0.408898115158

startsWith4 took 0.363884925842

startsWith5 took 0.638479948044

startsWith6 took 1.41304707527

如您所见,将干草堆作为数组来查找第一位置的char始终是最快的解决方案。 无论字符串长度如何,它始终以相等的速度运行。 当字符串不以前缀开头时,对于短字符串,使用startsWith比stripos8快,但是对于长字符串,使用速度较慢。 区别是无关紧要的。 stripos长长的琴弦非常慢。 preg_match不管字符串长度如何,其性能基本相同,但速度中等。 stripos8解决方案的性能最差,尽管可能更可靠。

假设这些数字是用于100.000次运行,那么很明显,我们正在谈论的是每次通话0.0000x秒。 除非一个应用程序正在做startsWith来检查生计,否则为了效率而选择另一个是毫无价值的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值