We have all heard of how in a for loop, we should do this:
for ($i = 0, $count = count($array); $i < $c; ++$i)
{
// Do stuff while traversing array
}
instead of this:
for ($i = 0; $i < count($array); ++$i)
{
// Do stuff while traversing array
}
for performance reasons (i.e. initializing $count would’ve called count() only once, instead of calling count() with every conditional check).
Does it then also make a difference if, in a foreach loop, I do this:
$array = do_something_that_returns_an_array();
foreach ($array as $key => $val)
{
// Do stuff while traversing array
}
instead of this:
foreach (do_something_that_returns_an_array() as $key => $val)
{
// Do stuff while traversing array
}
assuming circumstances allow me to use either? That is, does PHP call the function only once in both cases, or is it like for where the second case would call the function again and again?
foreach()is implemented using iterators – thus it only calls the function that returns an array once, and then uses the iterator which points to the existing result set to continue with each item.