Ненужное вычисление длины массива в цикле в PHP
Пусть дан некоторый массив с числами:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Давайте сделаем так, чтобы каждый элемент
массива возвелся квадрат. To есть у нас должен
остаться тот же массив $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>';
}
}
?>