<?php
class ZipIterator implements \Iterator
{
const ZIP_ALL = '{6087F687-D674-4549-AFBF-8D4DC07FE06F}';
private $_iterators;
private $_zipAll = false;
public function __construct()
{
if ($argument === self::ZIP_ALL) {
$this->_zipAll = true;
}
$this->_iterators[] = new \ArrayIterator($argument);
}
else if ($argument instanceof \Traversable) {
$this->_iterators[] = $argument;
}
else {
throw new Exception("All arguments to ".__CLASS__." must be arrays or implement Traversable.");
}
}
}
{
$result = [];
foreach ($this->_iterators as $iterator) {
}
return $result;
}
{
foreach ($this->_iterators as $iterator) {
}
}
{
$result = [];
foreach ($this->_iterators as $iterator) {
$result[] = $iterator->key(); }
return $result;
}
public function valid()
{
foreach ($this->_iterators as $iterator) {
if ($iterator->valid() ^ !$this->_zipAll) {
return $this->_zipAll;
}
}
return !$this->_zipAll;
}
{
foreach ($this->_iterators as $iterator) {
}
}
}
$a = [ 1, 2, 3 ];
$b = [ 'foo', 'bar' ];
foreach (new ZipIterator($a, $b) as $pair) {
}
foreach (new ZipIterator($a, $b, ZipIterator::ZIP_ALL) as $pair) {
}
PD9waHAKCmNsYXNzIFppcEl0ZXJhdG9yIGltcGxlbWVudHMgXEl0ZXJhdG9yCnsKICAgIGNvbnN0IFpJUF9BTEwgPSAnezYwODdGNjg3LUQ2NzQtNDU0OS1BRkJGLThENERDMDdGRTA2Rn0nOwoKICAgIHByaXZhdGUgJF9pdGVyYXRvcnM7CgogICAgcHJpdmF0ZSAkX3ppcEFsbCA9IGZhbHNlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoZnVuY19nZXRfYXJncygpIGFzICRhcmd1bWVudCkgewogICAgICAgICAgICBpZiAoJGFyZ3VtZW50ID09PSBzZWxmOjpaSVBfQUxMKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3ppcEFsbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaXNfYXJyYXkoJGFyZ3VtZW50KSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9pdGVyYXRvcnNbXSA9IG5ldyBcQXJyYXlJdGVyYXRvcigkYXJndW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCRhcmd1bWVudCBpbnN0YW5jZW9mIFxUcmF2ZXJzYWJsZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9pdGVyYXRvcnNbXSA9ICRhcmd1bWVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkFsbCBhcmd1bWVudHMgdG8gIi5fX0NMQVNTX18uIiBtdXN0IGJlIGFycmF5cyBvciBpbXBsZW1lbnQgVHJhdmVyc2FibGUuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKQogICAgewogICAgICAgICRyZXN1bHQgPSBbXTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+X2l0ZXJhdG9ycyBhcyAkaXRlcmF0b3IpIHsKICAgICAgICAgICAgJHJlc3VsdFtdID0gJGl0ZXJhdG9yLT5jdXJyZW50KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9pdGVyYXRvcnMgYXMgJGl0ZXJhdG9yKSB7CiAgICAgICAgICAgICRpdGVyYXRvci0+bmV4dCgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9pdGVyYXRvcnMgYXMgJGl0ZXJhdG9yKSB7CiAgICAgICAgICAgICRyZXN1bHRbXSA9ICRpdGVyYXRvci0+a2V5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKQogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5faXRlcmF0b3JzIGFzICRpdGVyYXRvcikgewogICAgICAgICAgICBpZiAoJGl0ZXJhdG9yLT52YWxpZCgpIF4gISR0aGlzLT5femlwQWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPl96aXBBbGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAhJHRoaXMtPl96aXBBbGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9pdGVyYXRvcnMgYXMgJGl0ZXJhdG9yKSB7CiAgICAgICAgICAgICRpdGVyYXRvci0+cmV3aW5kKCk7CiAgICAgICAgfQogICAgfQp9CgokYSA9IFsgMSwgMiwgMyBdOwokYiA9IFsgJ2ZvbycsICdiYXInIF07Cgpmb3JlYWNoIChuZXcgWmlwSXRlcmF0b3IoJGEsICRiKSBhcyAkcGFpcikgewogICAgZWNobyBpbXBsb2RlKCIgIiwgJHBhaXIpLiJcbiI7Cn0KCmZvcmVhY2ggKG5ldyBaaXBJdGVyYXRvcigkYSwgJGIsIFppcEl0ZXJhdG9yOjpaSVBfQUxMKSBhcyAkcGFpcikgewogICAgZWNobyBpbXBsb2RlKCIgIiwgJHBhaXIpLiJcbiI7Cn0K