PHP 루프에서 불필요한 배열 길이 계산
숫자로 이루어진 어떤 배열이 주어집니다:
<?php
$arr = [1, 2, 3, 4, 5];
?>
배열의 각 요소를 제곱해 봅시다. 즉, 동일한 $arr 배열을 유지하되 숫자들을 제곱해야 합니다.
이 경우 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 = 1; $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>';
}
}
?>