Optimering av onödiga loopgenomgångar i PHP
I följande kod kontrollerar en programmerare
om talet 3 finns i arrayen:
<?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);
?>
Vad är fel med hans lösning? Det verkar som att inga
onödiga operationer görs i loopen. Problemet,
ändå, är att efter det har fastställts
att talet 3 finns i arrayen - så fortsätter
loopen att snurra till slutet av arrayen.
Mest orationellt blir det om talet 3
hittas någonstans i början av arrayen, medan själva arrayen
har en längd på, låt oss säga, 1000 element.
Då blir det tusen meningslösa onödiga iterationer
av loopen! Inte optimalt.
Låt oss optimera koden genom att stoppa loopen i tid:
<?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öljande kod räknar ut hur många
element i arrayen som behöver läggas ihop
för att summan ska bli större än 10.
Utför optimering:
<?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öljande kod skriver ut jämna tal från ett givet intervall. Utför optimering:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Följande kod skriver ut tal
som är delbara med både 2
och 3. Utför optimering:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>