unset関数を使うと処理速度はどうなるのか、という話。
while文の最後にunset関数を使っています。
結論
「while文中では、最後に変数を破棄したほうが処理が早くなるのかも」
2つ目のコードの方が30ms(0.03秒)早いです。
追記
ご指摘いただいた風に、コードを修正したところ、実行速度が50ms早くなりました。
unset構文に関しては、スコープを把握しないで乱用すると大変なことになりそうです。複数の引数に対応しているようなので、1行にまとめました。
これでも問題なく動く
<?PHP
$content = fopen($argv[1], "r");
while (($line = fgets($content)) !== false) {
$ary = preg_split("/[\s]/", $line);
$str = $ary[1];
$pattern = preg_split("/[\\+\-]/", $ary[1]);
foreach (str_split($pattern[0]) as $val) {
$left[] = $val;
}
foreach (str_split($pattern[1]) as $val) {
$right[] = $val;
}
$leftnumber = substr($ary[0], 0, count($left));
$rightnumber = substr($ary[0], count($left));
if (strstr($ary[1], "+")) {
echo $leftnumber + $rightnumber . PHP_EOL;
} elseif (strstr($ary[1], "-")) {
echo $leftnumber - $rightnumber . PHP_EOL;
}
unset($left, $right);
}
fclose($content);
だけどこっちの方が処理は早い
<?PHP
$content = fopen($argv[1], "r");
while (($line = fgets($content)) !== false) {
$ary = preg_split("/[\s]/", $line);
$str = $ary[1];
$pattern = preg_split("/[\\+\-]/", $ary[1]);
foreach (str_split($pattern[0]) as $val) {
$left[] = $val;
}
foreach (str_split($pattern[1]) as $val) {
$right[] = $val;
}
$leftnumber = substr($ary[0], 0, count($left));
$rightnumber = substr($ary[0], count($left));
if (strstr($ary[1], "+")) {
echo $leftnumber + $rightnumber . PHP_EOL;
} elseif (strstr($ary[1], "-")) {
echo $leftnumber - $rightnumber . PHP_EOL;
}
unset($left, $right, $rightnumber, $leftnumber);
}
fclose($content);
処理速度を気にするならPHPじゃなくて(ry
って話になりそうですね。