On Fri, Oct 28, 2011 at 12:09:24PM -0600, George Langley wrote: > Hi all. Am wondering if there is a best practice for looping through an array, when you need both the item and its position (ie. 1, 2, 3....). The two ways I know of: > > // the for loop tracks the position and you get each item from the array > $allFiles = array("coffee.jpg", "tea.jpg", "milk.jpg"); > $numberOfFiles = count($allFiles); > for ($i=1; $i<=$numberOfFiles; $i++) { > $currFile = $allFiles[$i - 1]; // since arrays start with 0 > doThisWith($currFile); > doThatWith($i); > } > > OR: > > // the for loop gets each item and you track the position > $allFiles = array("coffee.jpg", "tea.jpg", "milk.jpg"); > $counter = 1; > foreach ($allFiles as $currFile) { > doThisWith($currFile); > doThatWith($counter); > $counter += 1; > } > > Both are the same number of lines, but my tests (see code below) indicate that the foreach loop is twice as fast. > Anyone have a "better" way - faster, more efficient, "cooler", etc.? (Or see some flaw in my test code below?) > Thanks. > > George Langley If you are certain that your array is consecutively indexed from 0, you can shave two lines off your code with: $allFiles = array("coffee.jpg", "tea.jpg", "milk.jpg"); foreach ($allFiles as $key => $currFile) { doThisWith($currFile); doThatWith($key+1); } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php