I want to skip some records in a foreach loop.
For example, there are 68 records in the loop. How can I skip 20 records and start from record #21?
The answer here is to use foreach with a LimitIterator . Show activity on this post. The continue causes the foreach to skip back to the beginning and move on to the next element in the array. It's extremely useful for disregarding parts of an array which you don't want to be processed in a foreach loop.
break ends execution of the current for , foreach , while , do-while or switch structure.
The premise is just wrong: forEach won't skip elements that are null or undefined. It skips elements that don't exist at all.
Five solutions come to mind:
The problem with for loops is that the keys may be strings or not continues numbers therefore you must use "double addressing" (or "table lookup", call it whatever you want) and access the array via an array of it's keys.
// Initialize 25 items $array = range( 1, 25, 1); // You need to get array keys because it may be associative array // Or it it will contain keys 0,1,2,5,6... // If you have indexes staring from zero and continuous (eg. from db->fetch_all) // you can just omit this $keys = array_keys($array); for( $i = 21; $i < 25; $i++){ echo $array[ $keys[ $i]] . "\n"; // echo $array[$i] . "\n"; // with continuous numeric keys }
I don't believe that this is a good way to do this (except the case that you have LARGE arrays and slicing it or generating array of keys would use large amount of memory, which 68 is definitively not), but maybe it'll work: :)
$i = 0; foreach( $array as $key => $item){ if( $i++ < 21){ continue; } echo $item . "\n"; }
Just get piece of array and use it in normal foreach loop.
$sub = array_slice( $array, 21, null, true); foreach( $sub as $key => $item){ echo $item . "\n"; }
next()
If you could set up internal array pointer to 21 (let's say in previous foreach loop with break inside, $array[21]
doesn't work, I've checked :P) you could do this (won't work if data in array === false
):
while( ($row = next( $array)) !== false){ echo $row; }
btw: I like hakre's answer most.
ArrayIterator
Probably studying documentation is the best comment for this one.
// Initialize array iterator $obj = new ArrayIterator( $array); $obj->seek(21); // Set to right position while( $obj->valid()){ // Whether we do have valid offset right now echo $obj->current() . "\n"; $obj->next(); // Switch to next object }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With