文字列への文字単位のアクセス

シングルバイト文字列の前から n 番目の文字を取り出す方法に関して。
substr() を使うのと、配列のようにオフセットを指定するのではどちらが速いのか気になったので試してみた。関数の呼び出しのオーバーヘッドがある分 substr() の方が遅いだろうと予想。

PHP 5.3.2 (cli) (built: Aug  7 2010 00:04:41) 
<?php
$subject = implode('', array_fill(0, 1000, '*')); /// 1000Byteの文字列
$var     = '';
$loop    = 1000000;

/// substr()
$s = microtime(true);
for ($i = 0; $i < $loop; $i++) {
  $var = substr($subject, 0, 1);
}
$e = microtime(true);
echo $e - $s, "\n";                # => 0.46896004676819

/// offset
$s = microtime(true);
for ($i = 0; $i < $loop; $i++) {
  $var = $subject[0];
}
$e = microtime(true);
echo $e - $s, "\n";                # => 0.22223997116089

予想通りの結果となった。オフセットを使った方がお得。

でも、コードの意図としてはどちらが意図が伝わるのだろうか。オフセットでのアクセスの仕方はちょっと小ネタっぽいから知らない人もいるだろうし。