<?php
class IteratorTest implements ArrayAccess, Iterator {
private $pointer = 0;
private $objects = array();
public function offsetExists($index) {
return isset($this->objects[$index]); }
public function offsetGet($index) {
return $this->objects[$index];
}
public function offsetSet($index, $newValue) {
$this->objects[$index] = $newValue;
}
public function offsetUnset($index) {
unset($this->objects[$index]); }
return key($this->objects); }
}
}
}
public function valid() {
}
}
$it = new IteratorTest();
$it['one'] = 1;
$it['two'] = 2;
foreach ($it as $k => $v) {
echo "$k: $v\n";
}
// expected result:
// one: 1
// two: 2
PD9waHAKY2xhc3MgSXRlcmF0b3JUZXN0IGltcGxlbWVudHMgQXJyYXlBY2Nlc3MsIEl0ZXJhdG9yIHsKICBwcml2YXRlICRwb2ludGVyID0gMDsKICBwcml2YXRlICRvYmplY3RzID0gYXJyYXkoKTsKCiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkaW5kZXgpIHsKICAgIHJldHVybiBpc3NldCgkdGhpcy0+b2JqZWN0c1skaW5kZXhdKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJGluZGV4KSB7CiAgICByZXR1cm4gJHRoaXMtPm9iamVjdHNbJGluZGV4XTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJGluZGV4LCAkbmV3VmFsdWUpIHsKICAgICR0aGlzLT5vYmplY3RzWyRpbmRleF0gPSAkbmV3VmFsdWU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJGluZGV4KSB7CiAgICB1bnNldCgkdGhpcy0+b2JqZWN0c1skaW5kZXhdKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7CiAgICByZXR1cm4ga2V5KCR0aGlzLT5vYmplY3RzKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkgewogICAgcmV0dXJuIGN1cnJlbnQoJHRoaXMtPm9iamVjdHMpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7CiAgICBuZXh0KCR0aGlzLT5vYmplY3RzKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKSB7CiAgICByZXNldCgkdGhpcy0+b2JqZWN0cyk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7CiAgICByZXR1cm4gY3VycmVudCgkdGhpcy0+b2JqZWN0cyk7CiAgfQp9CgokaXQgPSBuZXcgSXRlcmF0b3JUZXN0KCk7CgokaXRbJ29uZSddID0gMTsKJGl0Wyd0d28nXSA9IDI7Cgpmb3JlYWNoICgkaXQgYXMgJGsgPT4gJHYpIHsKICBlY2hvICIkazogJHZcbiI7Cn0KCi8vIGV4cGVjdGVkIHJlc3VsdDoKLy8gb25lOiAxCi8vIHR3bzogMg==