Kukokotoa Urefu wa Safu Bila Faida Katika Kitanzi PHP

Acha tuwe na safu fulani ya nambari:

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

Wacha tubadilishe kila kipengele cha safu kiwe kimoja kwa mraba. Hii inamaanisha safu ile ile $arr itabaki, lakini kwa nambari zilizo mraba.

Katika hali kama hii, kitanzi foreach hakifai, bali kinachohitajika ni kitanzi cha kawaida for kwa safu, kama ifuatavyo:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  for ($i = 0; $i < count($arr); $i++) {
    $arr[$i] = $arr[$i] * $arr[$i]; // kubadilisha kila kipengele cha safu
  }
  
  var_dump($arr);
?>

Nini kimeshakosekana katika msimbo huu? Shida ni kwamba count($arr) itakokotolewa kila wakati kitanzi kinaporudia! Kwa nini, kwani urefu wa safu haubadiliki wakati wa kitanzi, sivyo?

Ili kuboresha, wacha tuweke ukokotoaji wa urefu wa safu kwenye tofauti tofauti:

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

Boresha msimbo ulio hapa chini:

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