Optymalizacja operacji cyklicznych w PHP
Nawet lekka operacja, wielokrotnie powtarzana w pętli, może zużyć dużo zasobów.
Spójrzmy na przykład. Załóżmy, że mamy daną pewną tablicę:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
?>
Znajdźmy średnią elementów tej tablicy. Aby to zrobić, trzeba znaleźć sumę elementów i podzielić ją przez ich liczbę. Załóżmy, że jakiś programista już rozwiązał to zadanie następująco:
<?php
$sum = 0;
foreach ($arr as $elem) {
$sum += $elem / count($arr);
}
echo $sum;
?>
Przyjrzyjmy się problemom takiego rozwiązania. Technicznie kod działa poprawnie i daje prawidłowy wynik. Chodzi o to, że matematycznie poprawne jest zarówno dzielenie całej sumy przez liczbę elementów, jak i dzielenie każdego ze składników przez liczbę elementów.
Jednak pojawia się inny problem. Chodzi o to, że będziemy wykonywać dzielenie tyle razy, ile elementów znajduje się w naszej tablicy. I okazuje się, że wykonujemy dużą liczbę zbędnych operacji, bo dzielenie można by wykonać na końcu - jeden raz, dzieląc całą znalezioną sumę.
Zoptymalizujmy nasz kod:
<?php
$sum = 0;
foreach ($arr as $elem) {
$sum += $elem;
}
echo $sum / count($arr);
?>
Zoptymalizuj podany poniżej kod:
<?php
for ($i = 1; $i <= 31; $i++) {
if ($i === date('d')) {
echo "<b>$i</b><br>";
}
if ($i !== date('d')) {
echo "$i<br>";
}
}
?>