function test3($firstData, $secondData) { $firstIterator = new ArrayIterator($firstData); $secondIterator = new ArrayIterator($secondData); $append = new AppendIterator(); $append->append($firstIterator); $append->append($secondIterator); foreach ($append as $key => $value) { printf("F: %s, S: %s, A: %s=>%s (%s)\n", $firstIterator->key(), $secondIterator->key(), $key, $value, $append->getIteratorIndex()); } }
<?php $a = new AppendIterator(); $a1 = new ArrayIterator([]); $a2 = new ArrayIterator([1, 2, 3]); $a->append($a1); $a->append($a2); var_dump($a->valid()); var_dump($a->current()); var_dump($a->getIteratorIndex()); // go to the end for ($a->rewind(); $a->valid(); $a->next()) { } $a->append(new ArrayIterator([])); $a->append(new ArrayIterator([4, 5, 6])); var_dump($a->valid()); var_dump($a->current()); var_dump($a->getIteratorIndex());
<?php function test_error_handler($errno, $msg, $filename, $linenum) { echo "Error {$msg} in {$filename} on line {$linenum}\n"; return true; } set_error_handler('test_error_handler'); $it = new AppendIterator(); try { $it->append(array()); } catch (Error $e) { test_error_handler($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); } $it->append(new ArrayIterator(array(1))); $it->append(new ArrayIterator(array(21, 22))); var_dump($it->getArrayIterator()); $it->append(new ArrayIterator(array(31, 32, 33))); var_dump($it->getArrayIterator()); $idx = 0; foreach ($it as $k => $v) { echo '===' . $idx++ . "===\n"; var_dump($it->getIteratorIndex()); var_dump($k); var_dump($v); } ?> ===DONE===
public function testResultsetAppendIterator() { if (!$this->_prepareTestMysql()) { $this->markTestSkipped("Skipped"); return; } // see http://php.net/manual/en/appenditerator.construct.php $iterator = new \AppendIterator(); $robots_first = Robots::find(array('limit' => 2)); $robots_second = Robots::find(array('limit' => 1, 'offset' => 2)); $robots_first_0 = $robots_first[0]; $robots_first_1 = $robots_first[1]; $robots_second_0 = $robots_second[0]; $iterator->append($robots_first); $iterator->append($robots_second); $iterator->rewind(); $this->assertTrue($iterator->valid()); $this->assertEquals($iterator->key(), 0); $this->assertEquals($iterator->getIteratorIndex(), 0); $this->assertEquals(get_class($iterator->current()), 'Robots'); $this->assertEquals($robots_first_0->name, $iterator->current()->name); $iterator->next(); $this->assertTrue($iterator->valid()); $this->assertEquals($iterator->key(), 1); $this->assertEquals($iterator->getIteratorIndex(), 0); $this->assertEquals(get_class($iterator->current()), 'Robots'); $this->assertEquals($robots_first_1->name, $iterator->current()->name); $iterator->next(); $this->assertTrue($iterator->valid()); $this->assertEquals($iterator->key(), 0); $this->assertEquals($iterator->getIteratorIndex(), 1); $this->assertEquals(get_class($iterator->current()), 'Robots'); $this->assertEquals($robots_second_0->name, $iterator->current()->name); $iterator->next(); $this->assertFalse($iterator->valid()); }