PHP-ում ցիկլի ավելորդ անցումների օպտիմիզացիա
Հաջորդ կոդում ինչ-որ ծրագրավորող ստուգում է,
արդյոք 3 թիվը կա՞ մասիվում.
<?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 թիվը
գտնվի ինչ-որ տեղ մասիվի սկզբում, իսկ ինքը՝ մասիվը
լինի երկար, օրինակ՝ 1000 էլեմենտ:
Ստացվում է հազար անօգուտ ավելորդ իտերացիա
ցիկլի: Ոչ օպտիմալ:
Եկեք օպտիմիզացնենք կոդը՝ ժամանակին դադարեցնելով ցիկլը.
<?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);
?>
Հաջորդ կոդը հաշվում է, թե քանի
մասիվի էլեմենտ պետք է գումարել,
որ գումարը դառնա 10-ից մեծ:
Կատարեք օպտիմիզացիա.
<?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;
?>
Հաջորդ կոդը արտածում է զույգ թվեր տրված միջակայքից: Կատարեք օպտիմիզացիա.
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Հաջորդ կոդը արտածում է թվեր,
որոնք միաժամանակ բաժանվում են և՛ 2-ի,
և՛ 3-ի: Կատարեք օպտիմիզացիա.
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>