LimitIterator reads only a selected window from another iterator.

bounded iteration Wrapping an iterator with `LimitIterator` keeps the loop focused on a smaller range.

Limit Iterator

offset
limit_iterator.php
Replay: real traced execution (multi-file project)
<?php
$offset = 1;
$source = new ArrayIterator(["zero", "one", "two", "three"]);
$window = new LimitIterator($source, $offset, 2);
$items = "";
foreach ($window as $value) {
    if ($items === "") {
        $items = $value;
    } else {
        $items = $items . "," . $value;
    }
}

echo "offset=" . $offset . "\n";
echo "items=" . $items . "\n";
<?php
$offset = 0;
$source = new ArrayIterator(["zero", "one", "two", "three"]);
$window = new LimitIterator($source, $offset, 2);
$items = "";
foreach ($window as $value) {
    if ($items === "") {
        $items = $value;
    } else {
        $items = $items . "," . $value;
    }
}

echo "offset=" . $offset . "\n";
echo "items=" . $items . "\n";
<?php
$offset = 2;
$source = new ArrayIterator(["zero", "one", "two", "three"]);
$window = new LimitIterator($source, $offset, 2);
$items = "";
foreach ($window as $value) {
    if ($items === "") {
        $items = $value;
    } else {
        $items = $items . "," . $value;
    }
}

echo "offset=" . $offset . "\n";
echo "items=" . $items . "\n";
  1. $offset ← 1, $source ← ArrayIterator, $window ← LimitIterator

    1<?php2$offset→ 1 = 1; //@offset=0, 23$source→ ArrayIterator = new ArrayIterator(["zero", "one", "two", "three"]);4$window→ LimitIterator = new LimitIterator($sourceArrayIterator, $offset1, 2);5$items→ (empty) = "";6foreach ($window as $value) {
  2. foreach ($window as $value)

    pass 1 of 2
    5$items = "";6foreach ($windowLimitIterator as $valueone) {7    if ($items === "") {8        $items = $value;
  3. $items ← one

    6foreach ($window as $value) {7    if ($items(empty) === "") {8        $items→ one = $valueone;9    } else {
  4. $items ← one,two

    pass 2 of 2
    5$items = "";6foreach ($windowLimitIterator as $valuetwo) {7    if ($items === "") {8        $items = $value;9    } else {10        $items→ one,two = $items . "," . $valuetwo;11    }
  5. echo "offset=" . $offset . " ";

    14echo "offset=" . $offset1 . "\n";15echo "items=" . $itemsone,two . "\n";
    outputoffset=1
    items=one,two
  1. $offset ← 0, $source ← ArrayIterator, $window ← LimitIterator

    1<?php2$offset→ 0 = 0;3$source→ ArrayIterator = new ArrayIterator(["zero", "one", "two", "three"]);4$window→ LimitIterator = new LimitIterator($sourceArrayIterator, $offset0, 2);5$items→ (empty) = "";6foreach ($window as $value) {
  2. foreach ($window as $value)

    pass 1 of 2
    5$items = "";6foreach ($windowLimitIterator as $valuezero) {7    if ($items === "") {8        $items = $value;
  3. $items ← zero

    6foreach ($window as $value) {7    if ($items(empty) === "") {8        $items→ zero = $valuezero;9    } else {
  4. $items ← zero,one

    pass 2 of 2
    5$items = "";6foreach ($windowLimitIterator as $valueone) {7    if ($items === "") {8        $items = $value;9    } else {10        $items→ zero,one = $items . "," . $valueone;11    }
  5. echo "offset=" . $offset . " ";

    14echo "offset=" . $offset0 . "\n";15echo "items=" . $itemszero,one . "\n";
    outputoffset=0
    items=zero,one
  1. $offset ← 2, $source ← ArrayIterator, $window ← LimitIterator

    1<?php2$offset→ 2 = 2;3$source→ ArrayIterator = new ArrayIterator(["zero", "one", "two", "three"]);4$window→ LimitIterator = new LimitIterator($sourceArrayIterator, $offset2, 2);5$items→ (empty) = "";6foreach ($window as $value) {
  2. foreach ($window as $value)

    pass 1 of 2
    5$items = "";6foreach ($windowLimitIterator as $valuetwo) {7    if ($items === "") {8        $items = $value;
  3. $items ← two

    6foreach ($window as $value) {7    if ($items(empty) === "") {8        $items→ two = $valuetwo;9    } else {
  4. $items ← two,three

    pass 2 of 2
    5$items = "";6foreach ($windowLimitIterator as $valuethree) {7    if ($items === "") {8        $items = $value;9    } else {10        $items→ two,three = $items . "," . $valuethree;11    }
  5. echo "offset=" . $offset . " ";

    14echo "offset=" . $offset2 . "\n";15echo "items=" . $itemstwo,three . "\n";
    outputoffset=2
    items=two,three