Аптымізацыя цыклічных аперацый у PHP
Нават лёгкая аперацыя, шматразова паўтораная ў цыкле, можа адняць шмат рэсурсаў.
Давайце паглядзім на прыкладзе. Хай у нас дадзены некаторы масіў:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
?>
Давайце знойдзем сярэдняе ад элементаў гэтага масіва. Для гэтага трэба знайсці суму элементаў і падзяліць яе на колькасць. Хай нейкі праграміст ужо вырашыў гэтую задачу наступным чынам:
<?php
$sum = 0;
foreach ($arr as $elem) {
$sum += $elem / count($arr);
}
echo $sum;
?>
Давайце разгледзім праблемы такога рашэння. Тэхнічна код працуе правільна і дае правільны адказ. Справа ў тым, што матэматычна карэктна як дзяліць усю суму на колькасць, так і дзяліць кожнае з складнікаў на колькасць.
Аднак, узнікае іншая праблема. Справа ў тым, што мы будзем выконваць дзяленне столькі разоў, колькі элементаў у нашым масіве. І атрымліваецца, што мы робім вялікую колькасць лішніх аперацый, бо дзяленне можна было б выканаць у канцы - адзін раз, падзяліўшы ўсю знойдзеную суму.
Давайце аптымізуем наш код:
<?php
$sum = 0;
foreach ($arr as $elem) {
$sum += $elem;
}
echo $sum / count($arr);
?>
Аптымізуйце прыведзены ніжэй код:
<?php
for ($i = 1; $i <= 31; $i++) {
if ($i === date('d')) {
echo "<b>$i</b><br>";
}
if ($i !== date('d')) {
echo "$i<br>";
}
}
?>