PHP for loop

The PHP ‘for loop’ based on my experience is an underused PHP function. We all have seen the following…

<?php
$array = [  ];// Of things

for($i=1; $i <= count($array); $i++)
{
// Do something 
}
?>

This is what happens

  1. Initialise the loop with the variable $i set to 1
  2. Count how many items are in the array and compare with $i to see if it greater or less
  3. Do something
  4. Add 1 (increment) to $i
  5. Count how many items are in the array and compare with $i to see if it greater or less
  6. Do something
  7. Add 1 (increment) to $i

Repeat

And this works fine. Lets look at the structure of the ‘for loop’ and see what is happening.

The For Loop Structure

for( {exp1}; {exp2}; {exp3} )
{
//Do something
}
  • Exp1 will be run once only and at the first time around the loop ( AKA an iteration)
  • Exp2 Will run at the beginning of every iteration ( or go around the loop)
  • Exp3 Will run at the end of every iteration.

In the original  code if the array is large it can have a negative impact on performance. Can it be made better?

Yes. How about the following?

<?php
$array = [  ];// Of things
$array_count = count($array);
for($i=1; $i <= $array_count; $i++)
{
// Do something 
}
?>

This works much better. The array is only counted once, but in my opinion it does not read well and feels clunky. What can be done?

The ‘for loop’ has 3 blocks (exp1, exp2, exp3) each separated with a colon. What you put in these blocks is upto you, you can even leave them blank. That being said lets rewrite the original code so that

  1. It works as expected
  2. It does so efficiently
  3. When you read it, it makes clearer sense;
<?php
$array = [  ];// Of things
for($i=1, $array_count = count($array); $i <= $array_count; $i++)
{
// Do something 
}
?>

Is that not better?

See PHP.net for more