Optimering av unødvendige løkkegjennomganger i PHP
I følgende kode sjekker en programmerer
om tallet 3 finnes i arrayet:
<?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);
?>
Hva er galt med løsningen hans? Det ser ut til
at ingen unødvendige operasjoner gjøres i løkken. Problemet,
likevel, er at etter det er avgjort
at tallet 3 finnes i arrayet - fortsetter løkken
å gå til slutten av arrayet.
Mest irrasjonelt vil det være hvis tallet 3
blir funnet et sted i begynnelsen av arrayet, mens selve arrayet
har en lengde på, for eksempel, 1000 elementer.
Da vil det bli tusen ubrukelige, unødvendige iterasjoner
av løkken! Ikke optimalt.
La oss optimalisere koden ved å stoppe løkken i tide:
<?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);
?>
Følgende kode beregner hvor mange
elementer i arrayet som må legges sammen
for at summen skal bli større enn 10.
Utfør optimalisering:
<?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;
?>
Følgende kode skriver ut partall fra et gitt intervall. Utfør optimalisering:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Følgende kode skriver ut tall
som er delelige samtidig på 2
og på 3. Utfør optimalisering:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>