Richard Quadling wrote: > 2010/1/27 Richard Quadling <rquadling@xxxxxxxxxxxxxx>: >> 2010/1/27 Michael A. Peters <mpeters@xxxxxxx>: >>> 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. > > hate to point this out but the Ultra-modern version is counting from 0-10 rather than 0-9 or 1-10; thus it's got an extra item from somewhere :p -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php