2010/1/27 Richard Quadling <rquadl...@googlemail.com>:
> 2010/1/27 Michael A. Peters <mpet...@mac.com>:
>> Paul M Foster wrote:
>>>
>>> "... should be obvious - but are often overlooked - points within coding
>>> practice that can cause the programmer to develop bad habits and bad
>>> code." - Dan Brown
>>>
>>> Tip #1:
>>>
>>> Don't use count() in loops unless there are very few items to count and
>>> performance doesn't matter, or the number will vary over the loop. That
>>> is, don't do this:
>>>
>>> for ($i = 0; $i < count($items); $i++)
>>>
>>> Instead, do this:
>>>
>>> $number = count($items);
>>> for ($i = 0; $i < $number; $i++)
>>
>> Gah!
>>
>> for ($i=0;$i<sizeof($array);$i++)
>>
>> is something I do all the time.
>> So the array size is being calculated each iteration?
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>
> for ($i = 0, $j = count($a) ; $i < $j ; ++$i) {
> }
>
> is a very common way to handle that.
>
> Of course...
>
> foreach(range(0, count($a)) as $i) {
> }
>
> is an alternative.
>
> You can see the effect of the counting if you replace ...
>
> count($a)
>
> with ...
>
> mycount($a)
>
> and have ...
>
> function mycount($a) {
>  echo 'Counting : ', count($a), PHP_EOL;
>  return count($a);
> }

<?php
function mycount($a) {
 echo 'Counting : ', count($a), PHP_EOL;
 return count($a);
}

$a = array(1,2,3,4,5,6,7,8,9,10);

echo PHP_EOL;
for($i = 0 ; $i < mycount($a) ; ++$i) {
 echo 'Traditional for() loop ', $i, PHP_EOL;
}

echo PHP_EOL;
for($i = 0, $j = mycount($a) ; $i < $j ; ++$i) {
 echo 'Modern for() loop ', $i, PHP_EOL;
}

echo PHP_EOL;
foreach(range(0, mycount($a)) as $i) {
 echo 'Ultra-modern foreach() with range() loop ', $i, PHP_EOL;
}
?>

outputs ...

Counting : 10
Traditional for() loop 0
Counting : 10
Traditional for() loop 1
Counting : 10
Traditional for() loop 2
Counting : 10
Traditional for() loop 3
Counting : 10
Traditional for() loop 4
Counting : 10
Traditional for() loop 5
Counting : 10
Traditional for() loop 6
Counting : 10
Traditional for() loop 7
Counting : 10
Traditional for() loop 8
Counting : 10
Traditional for() loop 9
Counting : 10

Counting : 10
Modern for() loop 0
Modern for() loop 1
Modern for() loop 2
Modern for() loop 3
Modern for() loop 4
Modern for() loop 5
Modern for() loop 6
Modern for() loop 7
Modern for() loop 8
Modern for() loop 9

Counting : 10
Ultra-modern foreach() with range() loop 0
Ultra-modern foreach() with range() loop 1
Ultra-modern foreach() with range() loop 2
Ultra-modern foreach() with range() loop 3
Ultra-modern foreach() with range() loop 4
Ultra-modern foreach() with range() loop 5
Ultra-modern foreach() with range() loop 6
Ultra-modern foreach() with range() loop 7
Ultra-modern foreach() with range() loop 8
Ultra-modern foreach() with range() loop 9
Ultra-modern foreach() with range() loop 10


So, with the count inline, there are actually 11 calls to the count
compared to 1 in each of the other 2 scenarios.


-- 
-----
Richard Quadling
"Standing on the shoulders of some very clever giants!"
EE : http://www.experts-exchange.com/M_248814.html
EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
ZOPA : http://uk.zopa.com/member/RQuadling

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to