-PHP Tips- 第13回 substrの裏技

phpでスライスは出来ないの?
【Tips】1文字だけならスライスが可能、しかも高速!
【Description】スライスというのはpython、ruby、D言語などにある概念(関数)で、部分文字列を取得する方法です。phpでは通常substr関数を用いて実現しますが、部分文字列が1文字であればスライスすることが出来、しかもsubstr関数よりも高速です。substr($str, 5, 1)と$str[5]は等価です。ただし、substr($str, 5, 2)と同じ結果を得るために$str[5].$str[6]と連結してしまうとsubstr関数よりも低速になってしまいます。なお、$str[5:6]といった方法は使えません。

<?php
define("WORK_TIME", 20000);

function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

$hoge = "this is a text to substring";

//substrする場合
$start_time = getmicrotime();
for($i = 0; $i < WORK_TIME; $i++){
    $dummy = substr($hoge, 5, 1);
}
$substr_time = sprintf("%.4f", getmicrotime() - $start_time);

//sliceの場合
$start_time = getmicrotime();
for($i = 0; $i < WORK_TIME; $i++){
    $dummy = $hoge[5];
}
$slice_time = sprintf("%.4f", getmicrotime() - $start_time);
?>
<html>
<head><title>substrとsliceの比較</title></head>
<body>
substrの結果:<?php echo($substr_time);?>秒<br>
sliceの結果:<?php echo($slice_time);?>秒<br>
</body>
</html>