creo que el mismo nombre de las costrucciones indican su uso, que no por ser bucles los dos son lo mismo, al final puedes hacerlos funcionar del mismo modo, pero deben entenderse de distinta manera:
for =
para foreach =
por cada uno while =
mientras
no es lo mismo decir "
por cada uno de los dulces que tengo en la bolsa voy a sacar dos"
Código PHP:
foreach ($candy as $one) $two = array_shift($candy);
a "
mientras tenga dulces en la bolsa voy a sacar dos"
Código PHP:
while (count($candy) && ($one = array_shift($candy)) && ($two = array_shift($candy)));
y en algunos casos el
for puede interpretarse como "
para tantos dulces que tenga, del primero al ultimo, saco dos"
Código PHP:
for ($i = 0, $c = count($candy); $i < $c; $one = $candy[$i++], $two = $candy[$i++]);
se supone que dichas construcciones deben facilitar la escritura y lectura de código, no es que deba existir una batalla entre que forma es mejor, es un discusión torpe y sin fundamentos...
es una mala practica programar queriendo hacer todo "mejor" desde el punto de vista computacional... se debería escribir software de manera humana, lógica y comprensible a simple lectura... si no alcanzamos a cubrir esta necesidad entonces perdemos el tiempo programando para robots...