在给定索引的字符串中获取字符的最快方法(PHP)
在给定索引的情况下,我知道几种从字符串中提取字符的方法在给定索引的字符串中获取字符的最快方法(PHP),php,string,Php,String,在给定索引的情况下,我知道几种从字符串中提取字符的方法 <?php $string = 'abcd'; echo $string[2]; echo $string{2}; echo substr($string, 2, 1); ?> 我不知道是否还有其他方法,如果你知道任何方法,请不要犹豫添加它。问题是,如果我选择并重复一种方法几百万次以上,可能会使用mt_rand来获得索引值,哪种方法在内存消耗最少和速度最快方面最有效?要得到答案,您需要设置一个基准测试台。在一个空闲框上比较
<?php
$string = 'abcd';
echo $string[2];
echo $string{2};
echo substr($string, 2, 1);
?>
我不知道是否还有其他方法,如果你知道任何方法,请不要犹豫添加它。问题是,如果我选择并重复一种方法几百万次以上,可能会使用mt_rand来获得索引值,哪种方法在内存消耗最少和速度最快方面最有效?要得到答案,您需要设置一个基准测试台。在一个空闲框上比较几个(几十万或几百万)迭代中的所有方法。尝试内置的microtime功能来测量开始和结束之间的差异。这就是你过去的时间 这个测试需要你们两分钟的时间来写 为了节省您的精力,我编写了一个测试。我自己的测试表明功能解决方案(substr)要慢得多(预期)。惯用的PHP({})解决方案与索引方法一样快。它们可以互换。([])是首选,因为这是PHP关于字符串偏移量的方向
<?php
$string = 'abcd';
$limit = 1000000;
$r = array(); // results
// PHP idiomatic string index method
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = $string{2};
}
$r[] = microtime(true) - $s;
echo "\n";
// PHP functional solution
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = substr($string, 2, 1);
}
$r[] = microtime(true) - $s;
echo "\n";
// index method
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = $string[2];
}
$r[] = microtime(true) - $s;
echo "\n";
// RESULTS
foreach ($r as $i => $v) {
echo "RESULT ($i): $v \n";
}
?>
结果:结果(PHP4和5惯用大括号语法):0.19106006622314
结果(字符串切片函数):0.506990957642
结果(*索引语法,大括号被弃用的未来*):0.19102001190186
$string[2]
或$string{2}
在速度和内存消耗方面应该相同,并且其中任何一个都应该比substr快。