PHP-তে অপ্রয়োজনীয় লুপ পাস অপ্টিমাইজেশন

নিচের কোডে একজন প্রোগ্রামার চেক করছে, অ্যারেতে 3 সংখ্যাটি আছে কিনা:

php<?php
  $arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  
  $exists = false;
  foreach ($arr as $elem) {
    if ($elem == 3) {
      $exists = true;
    }
  }
  
  var_dump($exists);
?>

তার সমাধানে কি সমস্যা? মনে হয় না লুপে কোনো অপ্রয়োজনীয় অপারেশন করা হচ্ছে। সমস্যা হলো, এটি নির্ধারণ করার পরেও যে 3 সংখ্যাটি অ্যারেতে আছে - লুপ তারপরও অ্যারের শেষ পর্যন্ত ঘুরতে থাকে।

সবচেয়ে বেশি অকার্যকর হবে, যদি 3 সংখ্যাটি অ্যারের শুরুতে somewhere পাওয়া যায়, এবং অ্যারেটি নিজেই 1000 elements দীর্ঘ হয়। এর ফলে এক হাজার useless অতিরিক্ত পুনরাবৃত্তি হবে লুপের! সর্বোত্তম নয়।

সঠিক সময়ে লুপ থামিয়ে কোডটি অপ্টিমাইজ করা যাক:

php<?php
  $arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  
  $exists = false;
  foreach ($arr as $elem) {
    if ($elem == 3) {
      $exists = true;
      break;
    }
  }
  
  var_dump($exists);
?>
Задание 1

নিচের কোডটি গণনা করে, অ্যারের কতগুলি উপাদান যোগ করতে হবে, যাতে যোগফল 10-এর বেশি হয়। অপ্টিমাইজেশন করুন:

php<?php
  $arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  $sum = 0;
  $i = 1;
  
  foreach ($arr as $elem) {
    $sum += $elem;
    
    if ($sum <= 10) {
      $i++;
    }
  }
  
  echo $i;
?>
Задание 2

নিচের কোডটি প্রদত্ত সীমা থেকে জোড় সংখ্যা প্রিন্ট করে। অপ্টিমাইজেশন করুন:

php<?php
  for ($i = 0; $i <= 100; $i++) {
    if ($i % 2 === 0) {
      echo $i;
    }
  }
?>
Задание 3

নিচের কোডটি সেই সংখ্যাগুলি প্রিন্ট করে, যেগুলি একই সাথে 2 এবং 3 দ্বারা বিভাজ্য। অপ্টিমাইজেশন করুন:

php<?php
  for ($i = 0; $i <= 100; $i++) {
    if ($i % 2 === 0 and $i % 3 === 0) {
      echo $i;
    }
  }
?>