Ottimizzazione dei passaggi superflui del ciclo in PHP
Nel codice seguente, un programmatore verifica
se nell'array è presente il numero 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);
?>
Cosa non va nella sua soluzione? Sembra che non
vengano eseguite operazioni superflue nel ciclo. Il problema,
tuttavia, è che dopo che è stato determinato
che il numero 3 è presente nell'array - il ciclo
continua comunque a girare fino alla fine dell'array.
La situazione più inefficiente si verifica se il numero 3
viene trovato da qualche parte all'inizio dell'array, mentre l'array stesso
ha una lunghezza, diciamo, di 1000 elementi.
Risulterebbero mille iterazioni inutili e superflue
del ciclo! Non ottimale.
Ottimizziamo il codice, fermando il ciclo al momento giusto:
<?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);
?>
Il codice seguente calcola quanti
elementi dell'array devono essere sommati
affinché la somma superi 10.
Esegui l'ottimizzazione:
<?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;
?>
Il codice seguente stampa i numeri pari da un intervallo dato. Esegui l'ottimizzazione:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Il codice seguente stampa i numeri
divisibili sia per 2
che per 3. Esegui l'ottimizzazione:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>