Suvišno izračunavanje dužine niza u petlji u PHP-u

Neka je dat neki niz brojeva:

php<?php
  $arr = [1, 2, 3, 4, 5];
?>

Hajde da uradimo tako da se svaki element niza kvadrira. To znači da bi trebalo da nam ostane isti niz $arr, ali sa kvadratima brojeva.

U ovom slučaju petlja foreach ne odgovara, već je potrebna obična petlja for po nizu, ovako:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  for ($i = 0; $i < count($arr); $i++) {
    $arr[$i] = $arr[$i] * $arr[$i]; // menjamo svaki element niza
  }
  
  var_dump($arr);
?>

Šta nije u redu sa ovim kodom? Problem je u tome što će se count($arr) besmisleno izračunavati u svakoj iteraciji petlje! A zašto, zar se dužina niza u petlji ne menja, zar ne?

Za optimizaciju, izračunavanje dužine niza izdvojimo u posebnu promenljivu:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $len = count($arr); // optimizujemo
  
  for ($i = 1; $i < $len; $i++) {
    $arr[$i] = $arr[$i] * $arr[$i];
  }
  
  var_dump($arr);
?>
Задание 1

Optimizujte donji kod:

php<?php
  $arr = [1, 2, 2, 4, 5];
  
  for ($i = 1; $i < count($arr); $i++) {
    if ($arr[$i - 1] === $arr[$i]) {
      echo $arr[$i] . '<br>';
    }
  }
?>