Re: BP for Looping through an Array
| From: | Jim Long | Date: | Fri, 28 Oct 2011 18:18:21 +0000 |
| Subject: | Re: BP for Looping through an Array | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-315509@lists.php.net to get a copy of this message | ||
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);
}