esistono differenze di prestazioni non molto significative ... ma esistono, non ritrovo più un vecchio post dove tra esempi e considerazioni eravamo arrivati alla seguente soluzione:
per gli array a chiave numerica, la soluzione più performante e comoda è la seguente:
for($a = 0, $b = count($array); $a < $b; $a++)
comoda perchè ad un certo punto si può uscire dal for semplicemente scrivendo
$a = $b;
performante perchè si basa su una sola funzione assegnata una sola volta ad inizio ciclo
$b = count($array);
colitamente invece si vede questo:
for($a = 0; $b = count($array); $a++)
dove per ogni ciclo del for si riusa, inutilmente, la funzione count($array);
il current invece lavora a livello del puntatore interno, ma è comunque una funzione sicuramente più pesante di un solo incremento numerico di intero, $a++ per l' appunto.
Per quel che riguarda invece array con chiavi di tipo stringa $pippo['pluto'] la lotta è tra
while(list($k,$v) = each($arr))
e il più semèplice ed allo stesso tempo performante
foreach($arr as $k => $v)
il while non vince in confronto nemmeno se invece di chiave e dati estrapoliamo solo la chiave
while(list($k,) = each($arr))
poichè la funzione foreach è stata estremamente ottimizzata dall versione 4.3 in su di php.
Da considerare però che il foreach, per uscire, richiede inesorabilmente un break; il quale non è propriamente la soluzione migliore per uscire da un ciclo mentre il while può avere una sentinella booleana al fine di uscire quando vogliamo
$ok = true;
while($ok && list($k,$v) = each($arr))
if($k == 'pluto') $ok = false;
Spero di aver fatto un po' di luce![]()


Rispondi quotando