我知道有幾種方法可以從給定索引的字符串中獲取字符。在給定索引的字符串中獲取字符的最快方法(PHP)
<?php
$string = 'abcd';
echo $string[2];
echo $string{2};
echo substr($string, 2, 1);
?>
我不知道是否有更多的方法,如果你知道任何請不要猶豫添加它。問題是,如果我要選擇並重復一種高於幾百萬次的方法,可能使用mt_rand來獲得索引值,哪種方法在最少內存消耗和最快速度方面最有效?
我知道有幾種方法可以從給定索引的字符串中獲取字符。在給定索引的字符串中獲取字符的最快方法(PHP)
<?php
$string = 'abcd';
echo $string[2];
echo $string{2};
echo substr($string, 2, 1);
?>
我不知道是否有更多的方法,如果你知道任何請不要猶豫添加它。問題是,如果我要選擇並重復一種高於幾百萬次的方法,可能使用mt_rand來獲得索引值,哪種方法在最少內存消耗和最快速度方面最有效?
要獲得答案,您需要設置基準測試裝備。比較空閒盒子上幾次(幾十萬次或數百萬次)迭代的所有方法。嘗試使用內置的microtime函數來測量開始和結束之間的差異。這是你的流逝時間。
該測試應該帶你所有的2分鐘寫。
爲了節省您的一些努力,我寫了一個測試。我自己的測試表明功能解決方案(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";
}
?>
結果:
RESULT(PHP4 & 5個慣用括號語法):0.19106006622314
RESULT(串切片功能):0.50699090957642
RESULT(* index語法,今後隨着大括號已被棄用*):0.19102001190186
'$ string [2]'或'$ string {2}'的速度和內存消耗應該相同,並且e其中的ither應該比substr更快。 – anubhava