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