PHPにおけるループ内での不要な配列長計算
ここに数値の配列があるとします:
<?php
$arr = [1, 2, 3, 4, 5];
?>
配列の各要素を2乗してみましょう。つまり、同じ$arr配列を、数値が2乗された状態で残す必要があります。
この場合、foreachループは適さず、通常のforループで配列を処理する必要があります。次のようになります:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // 配列の各要素を変更
}
var_dump($arr);
?>
このコードの何が問題でしょうか?問題は、count($arr)がループの反復ごとに無意味に計算されてしまうことです!なぜでしょう?結局のところ、ループ内での配列の長さは変わらないのではないですか?
最適化するために、配列長の計算を別の変数に移動させましょう:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // 最適化
for ($i = 0; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
以下のコードを最適化してください:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>