Optimalizácia nadbytočných prechodov cyklu v PHP
V nasledujúcom kóde nejaký programátor kontroluje,
či sa v poli nachádza číslo 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);
?>
Čo je nesprávne na jeho riešení? Zdá sa, že žiadne
nadbytočné operácie v cykle sa nerobia. Problém
však je, že po tom, ako sa zistilo,
že číslo 3 je v poli - cyklus
sa aj naďalej točí až do konca poľa.
Najneracionálnejšie to bude, ak sa číslo 3
nájde niekde na začiatku poľa, a samotné pole
bude mať dĺžku, povedzme, 1000 prvkov.
Výsledkom bude tisíc zbytočných nadbytočných iterácií
cyklu! Nie je to optimálne.
Optimalizujme kód včasným zastavením cyklu:
<?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);
?>
Nasledujúci kód počíta, koľko
prvkov poľa treba sčítať,
kým sa súčet stane väčším ako 10.
Vykonajte optimalizáciu:
<?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;
?>
Nasledujúci kód vypisuje párne čísla z daného intervalu. Vykonajte optimalizáciu:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Nasledujúci kód vypisuje čísla,
ktoré sú deliteľné súčasne 2
a 3. Vykonajte optimalizáciu:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>