foreach ( $arr as $a ){ //some code }o
while ( $a = array_shift($arr) ){ //some code }¿Cuál debo usar?
Según la sección de comentarios del sitio web oficial de php,
El uso de array_shift sobre una matriz más grande fue bastante lento. Se aceleró a medida que la matriz se encogía, muy probablemente porque tiene que reindexar un conjunto de datos más pequeño.
array_shift() requiere un proceso de reindexación en la matriz, por lo que debe ejecutar todos los elementos e indexarlos.
Si la matriz es demasiado grande, evite usar array_shift().
Usar foreach es la opción preferida. Con él, puede omitir cualquier estructura que implemente Traversable. Si tiene una matriz indexada, es preferible usar for. La diferencia entre ville y foreach no debería ser muy diferente. Foreach preferido. También te aconsejo que navegues tu código, según el caso.