I did something like this today:
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:
That way you ensure that size is always the correct integer. And it will run faster.