Optimalizace cyklických operací v PHP
I lehká operace, která se mnohokrát opakuje v cyklu, může spotřebovat mnoho prostředků.
Podívejme se na příklad. Předpokládejme, že máme dané nějaké pole:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
?>
Nalezněme průměr prvků tohoto pole. K tomu je potřeba najít součet prvků a vydělit jej jejich počtem. Předpokládejme, že nějaký programátor již tento úkol vyřešil následujícím způsobem:
<?php
$sum = 0;
foreach ($arr as $elem) {
$sum += $elem / count($arr);
}
echo $sum;
?>
Podívejme se na problémy takového řešení. Technicky kód funguje správně a dává správnou odpověď. Jde o to, že matematicky je korektní jak vydělit celý součet počtem, tak vydělit každý sčítanec počtem.
Vzniká však jiný problém. Jde o to, že budeme provádět dělení tolikrát, kolik je prvků v našem poli. A vychází, že děláme velké množství nadbytečných operací, protože dělení bychom mohli provést až na konci - jednou, vydělením celého nalezeného součtu.
Optimalizujme náš kód:
<?php
$sum = 0;
foreach ($arr as $elem) {
$sum += $elem;
}
echo $sum / count($arr);
?>
Optimalizujte níže uvedený kód:
<?php
for ($i = 1; $i <= 31; $i++) {
if ($i === date('d')) {
echo "<b>$i</b><br>";
}
if ($i !== date('d')) {
echo "$i<br>";
}
}
?>