Nereikalingų ciklo praėjimų optimizavimas PHP
Šiame kode kažkoks programuotojas patikrina,
ar masyve yra skaičius 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);
?>
Kas negerai su jo sprendimu? Atrodo, kad cikle
neatliekama jokių papildomų operacijų. Tačiau
problema yra ta, kad po to, kai nustatoma,
kad masyve yra skaičius 3 - ciklas
vis tiek sukasi iki masyvo pabaigos.
Neracionaliausia bus, jei skaičius 3
bus rastas kažkur masyvo pradžioje, o pats masyvas
bus ilgas, tarkime, 1000 elementų.
Pasirodo tūkstantis nenaudingų papildomų ciklo
iteracijų! Neoptimalu.
Optimizuokime kodą, laiku sustabdydami ciklą:
<?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);
?>
Šis kodas skaičiuoja, kiek
masyvo elementų reikia sudėti,
kad suma taptų didesnė už 10.
Atlikite optimizavimą:
<?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;
?>
Šis kodas išveda lyginius skaičius iš nurodyto intervalo. Atlikite optimizavimą:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Šis kodas išveda skaičius,
kurie dalijasi iš 2
ir iš 3 vienu metu. Atlikite optimizavimą:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>