Llogaritja e panevojshme e gjatësisë së array në cikël në PHP

Le të jetë dhënë një array me numra:

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

Le ta bëjmë që çdo element i array të ngrihet në katror. Domethënë, ne duhet të kemi të njëjtin array $arr, por me katrorët e numrave.

Në këtë rast cikli foreach nuk përshtatet, por duhet një cikël i zakonshëm for për array, kështu:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  for ($i = 0; $i < count($arr); $i++) {
    $arr[$i] = $arr[$i] * $arr[$i]; // ndryshojmë çdo element të array
  }
  
  var_dump($arr);
?>

Çfarë nuk shkon me këtë kod? Problemi është që count($arr) do të llogaritet në mënyrë të pakuptimtë çdo përsëritje të ciklit! Pse, sepse gjatësia e array nuk ndryshon gjatë ciklit, apo jo?

Për optimizim, le ta nxjerrim llogaritjen e gjatësisë së array në një variabël të veçantë:

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

Optimizoni kodin e dhënë më poshtë:

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>';
    }
  }
?>