Generally there's no reason to use next in a for/foreach loop, and may have something to do with it. It's not like a "next" in any other languages, it is used to advance the pointer within the loop (instead of just going to the next item.) It advances the pointer by one (one more than it would in a normal for/foreach.)
You don't need to evaluate true/false, 1/0 if your array values could be empty or null. It is, or it is not, allowing you to try a more simple method:
The use of next() is what's messing things up. The foreach loop automatically advances to the next element in the array, so there's no need for you to do it "manually".
Note: It's best to be as explicit as possible. Yes, if( $value == true ) and if( $value ) will work if $value is true, 1, or "1", but it will also "work" if $value is "foo". That's probably not a good thing.
Your if( $value == true ) should be if( $value === 1 ) (if $value is an actual integer) or, even better, if( 1 === $value ). Getting into the habit of placing the variable on the right means that you avoid this sort of "whoops!" moment: if( $value = 1 ).