How can i limit a foreach() statement? Say i only want it to run the first 2 'eaches' or something?
Asked
Active
Viewed 1.8e+01k times
5 Answers
103
There are many ways, one is to use a counter:
$i = 0;
foreach ($arr as $k => $v) {
/* Do stuff */
if (++$i == 2) break;
}
Other way would be to slice the first 2 elements, this isn't as efficient though:
foreach (array_slice($arr, 0, 2) as $k => $v) {
/* Do stuff */
}
You could also do something like this (basically the same as the first foreach, but with for):
for ($i = 0, reset($arr); list($k,$v) = each($arr) && $i < 2; $i++) {
}

reko_t
- 55,302
- 10
- 87
- 77
-
10the last one would be very slow and bad. use 1 or 2 instead. – mauris Nov 01 '09 at 11:56
-
4you can also use $k as key, if($k == 2) { break; } – Ruben Mar 04 '13 at 08:52
44
You can either use
break;
or
foreach() if ($tmp++ < 2) {
}
(the second solution is even worse)

Valentin Golev
- 9,965
- 10
- 60
- 84
11
In PHP 5.5+, you can do
function limit($iterable, $limit) {
foreach ($iterable as $key => $value) {
if (!$limit--) break;
yield $key => $value;
}
}
foreach (limit($arr, 10) as $key => $value) {
// do stuff
}
Generators rock.

Tgr
- 27,442
- 12
- 81
- 118
7
this is best solution for me :)
$i=0;
foreach() if ($i < yourlimitnumber) {
$i +=1;
}

tcgumus
- 328
- 3
- 8