How to determine the first and last iteration in a foreach loop?

前端 未结 20 1132
遇见更好的自我
遇见更好的自我 2020-11-22 16:45

The question is simple. I have a foreach loop in my code:

foreach($array as $element) {
    //code
}

In this loop, I want to r

20条回答
  •  孤街浪徒
    2020-11-22 17:27

    The most efficient answer from @morg, unlike foreach, only works for proper arrays, not hash map objects. This answer avoids the overhead of a conditional statement for every iteration of the loop, as in most of these answers (including the accepted answer) by specifically handling the first and last element, and looping over the middle elements.

    The array_keys function can be used to make the efficient answer work like foreach:

    $keys = array_keys($arr);
    $numItems = count($keys);
    $i=0;
    
    $firstItem=$arr[$keys[0]];
    
    # Special handling of the first item goes here
    
    $i++;
    while($i<$numItems-1){
        $item=$arr[$keys[$i]];
        # Handling of regular items
        $i++;
    }
    
    $lastItem=$arr[$keys[$i]];
    
    # Special handling of the last item goes here
    
    $i++;
    

    I haven't done benchmarking on this, but no logic has been added to the loop, which is were the biggest hit to performance happens, so I'd suspect that the benchmarks provided with the efficient answer are pretty close.

    If you wanted to functionalize this kind of thing, I've taken a swing at such an iterateList function here. Although, you might want to benchmark the gist code if you're super concerned about efficiency. I'm not sure how much overhead all the function invocation introduces.

提交回复
热议问题