for loop vs while loop vs foreach loop PHP for loop vs while loop vs foreach loop PHP php php

for loop vs while loop vs foreach loop PHP


which one is better for performance?

It doesn't matter.

what's the criteria to select a loop?

If you just need to walk through all the elements of an object or array, use foreach. Cases where you need for include

  • When you explicitly need to do things with the numeric index, for example:
  • when you need to use previous or next elements from within an iteration
  • when you need to change the counter during an iteration

foreach is much more convenient because it doesn't require you to set up the counting, and can work its way through any kind of member - be it object properties or associative array elements (which a for won't catch). It's usually best for readability.

which should be used when we loop inside another loop?

Both are fine; in your demo case, foreach is the simplest way to go.


which one is better for performance?

Who cares? It won't be significant. Ever. If these sorts of tiny optimizations mattered, you wouldn't be using PHP.

what's the criteria to select a loop?

Pick the one that's easiest to read and least likely to cause mistakes in the future. When you're looping through integers, for loops are great. When you're looping through a collection like an array, foreach is great, when you just need to loop until you're "done", while is great.

This may depend on stylistic rules too (for example, in Python you almost always want to use a foreach loop because that's "the way it's done in Python"). I'm not sure what the standard is in PHP though.

which should be used when we loop inside another loop?

Whichever loop type makes the most sense (see the answer above).

In your code, the for loop seems pretty natural to me, since you have a defined start and stop index.


Check http://www.phpbench.com/ for a good reference on some PHP benchmarks.

The for loop is usually pretty fast. Don't include your count($rows) or count($all) in the for itself, do it outside like so:

$count_all = count($all);for($i=0;$i<$count_all;$i++){    // Code here}

Placing the count($all) in the for loop makes it calculate this statement for each loop. Calculating the value first, and then using the calculation in the loop makes it only run once.