Optimizacija suvišnih prolaza kroz petlju u PHP-u
U sledećem kodu neki programer proverava
da li u nizu postoji broj 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);
?>
Šta nije u redu sa njegovim rešenjem? Kao da nema
nikakvih suvišnih operacija u petlji. Problem,
međutim, je u tome što, nakon što se utvrdi
da broj 3 postoji u nizu - petlja
ipak nastavlja da se izvršava do kraja niza.
Najneracionalnije će biti ako se broj 3
nađe negde na početku niza, a sam niz
je dug, recimo, 1000 elemenata.
Ispostavlja se da ima hiljadu beskorisnih, suvišnih iteracija
petlje! Nije optimalno.
Optimizujmo kod, zaustavivši petlju na vreme:
<?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);
?>
Sledeći kod računa, koliko
elemenata niza je potrebno sabrati,
da bi suma postala veća od 10.
Izvršite optimizaciju:
<?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;
?>
Sledeći kod ispisuje parne brojeve iz datog intervala. Izvršite optimizaciju:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Sledeći kod ispisuje brojeve
deljive istovremeno sa 2
i sa 3. Izvršite optimizaciju:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>