PHP에서 불필요한 루프 순회 최적화
다음 코드에서 어떤 프로그래머가 배열에 숫자
3가 있는지 확인하고 있습니다:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
}
}
var_dump($exists);
?>
이 해결책에 무엇이 문제일까요? 루프 내에
불필요한 연산이 수행되지 않는 것처럼 보입니다.
그러나 문제는 숫자 3가 배열에 있다는 것이
확인된 후에도 루프가 배열 끝까지 계속 돌아간다는
점에 있습니다.
가장 비효율적인 경우는 숫자 3가 배열의
시작 부분 근처에서 발견되고, 배열 자체의 길이가
예를 들어 1000개의 요소일 때입니다.
그러면 천 번의 쓸모없는 불필요한 루프 반복이
발생합니다! 최적화되지 않았습니다.
루프를 적시에 중지시켜 코드를 최적화합시다:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
break;
}
}
var_dump($exists);
?>
다음 코드는 배열의 요소를 몇 개 더해야
합이 10을 초과하는지 계산합니다.
최적화를 수행하세요:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$sum = 0;
$i = 1;
foreach ($arr as $elem) {
$sum += $elem;
if ($sum <= 10) {
$i++;
}
}
echo $i;
?>
다음 코드는 주어진 구간에서 짝수를 출력합니다. 최적화를 수행하세요:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
다음 코드는 동시에 2와
3로 나누어 떨어지는 숫자를 출력합니다.
최적화를 수행하세요:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>