Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在给定索引的字符串中获取字符的最快方法(PHP)_Php_String - Fatal编程技术网

在给定索引的字符串中获取字符的最快方法(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快。