Излишно изчисляване на дължината на масив в цикъл в PHP
Нека е даден някакъв масив с числа:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Нека направим така, че всеки елемент
на масива да бъде повдигнат на квадрат. Тоест трябва да
остане същият масив $arr, но с
квадратите на числата.
В такъв случай цикълът foreach не е подходящ,
а е необходим обикновен цикъл for по масива,
ето така:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // променяме всеки елемент от масива
}
var_dump($arr);
?>
Какво не е наред с този код? Проблемът е,
че count($arr) безсмислено ще се
изчислява при всяка итерация на цикъла! Защо,
ведь дължината на масива в цикъла не се променя, нали?
За оптимизация ще изнесем изчислението на дължината на масива в отделна променлива:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // оптимизираме
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Оптимизирайте дадения по-долу код:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>