2

Unsetting elements of array in a for loop in php

Posted May 27th, 2011 in Snippets and tagged , , , , by Metod

I did something like this today:

  1. <?php
  2. $arr = array("some", "elements", "in", "array");
  3.  
  4. for($i = 0; $i < sizeof($arr); $i++)
  5.     if(true) // for sake of clarity
  6.         unset($arr[$i]);

The loop never came to the final element of the array, therefore not checking all of them. What was the problem?

Since sizeof($arr) is calculated every time the loop comes around, it was returning less and less with every unset instead of returning the same value.

Solution:

  1. <?php
  2. $arr = array("some", "elements", "in", "array");
  3.  
  4. $size = sizeof($arr);
  5.  
  6. for($i = 0; $i < $size; $i++)
  7.     if(true) // for sake of clarity
  8.         unset($arr[$i]);

That way you ensure that size is always the correct integer. And it will run faster.

2 Responses so far.

  1. gasper_k says:

    You could also go with foreach ($arr as $i => $value) unset($arr[$i]);

  2. Metod says:

    Yes, indeed. Don’t know why that didn’t occur to me. Must be the “late” hours. :)