相关疑难解决方法(0)

isset()vs strlen() - 快速/清晰的字符串长度计算

我遇到了这段代码......

if(isset($string[255])) {
    // too long
}
Run Code Online (Sandbox Code Playgroud)

isset()比6到40快

if(strlen($string) > 255) {
    // too long
}
Run Code Online (Sandbox Code Playgroud)

isset()的唯一缺点是代码不清楚 - 我们无法立即知道正在做什么(参见pekka的回答).我们可以在一个函数中包装isset(),即strlt($ string,255),但我们会失去isset()的速度优势.

我们如何在保留代码可读性的同时使用更快的isset()函数?

编辑:测试显示速度http://codepad.org/ztYF0bE3

strlen() over 1000000 iterations 7.5193998813629
isset() over 1000000 iterations 0.29940009117126
Run Code Online (Sandbox Code Playgroud)

EDIT2:这就是为什么isset()更快

$string = 'abcdefg';
var_dump($string[2]);
Output: string(1) “c”

$string = 'abcdefg';
if (isset($string[7])){
     echo $string[7].' found!';
  }else{
     echo 'No character found at position 7!';
}
Run Code Online (Sandbox Code Playgroud)

这比使用strlen()更快,因为"...调用函数比使用语言结构更昂贵." http://www.phpreferencebook.com/tips/use-isset-instead-of-strlen/

EDIT3:我总是被教导对mirco-optimization感兴趣.可能是因为我在计算机上的资源很少的时候被教过.我对这个可能并不重要的观点持开放态度,在答案中有一些好的论据反对它.我已经开始探索这个问题... /sf/ask/488824591/

php coding-style

55
推荐指数
4
解决办法
1万
查看次数

如何在PHP中迭代UTF-8字符串?

如何使用索引逐字符迭代UTF-8字符串?

当您使用括号运算符访问UTF-8字符串时,$str[0]utf编码的字符由2个或更多元素组成.

例如:

$str = "K?t";
$str[0] = "K";
$str[1] = "?";
$str[2] = "?";
$str[3] = "t";
Run Code Online (Sandbox Code Playgroud)

但我希望:

$str[0] = "K";
$str[1] = "?";
$str[2] = "t";
Run Code Online (Sandbox Code Playgroud)

这是可能的,mb_substr但这是非常缓慢的,即.

mb_substr($str, 0, 1) = "K"
mb_substr($str, 1, 1) = "?"
mb_substr($str, 2, 1) = "t"
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法来逐字符串字符串而不使用mb_substr

php utf-8

41
推荐指数
5
解决办法
1万
查看次数

标签 统计

php ×2

coding-style ×1

utf-8 ×1