silverstripe-fulltextsearch/code/utils/MultipleArrayIterator.php
Elliot Sawyer 1728a62af5 WIP: Silverstripe 4 compatibility
Thanks to Marco Hermo and Brett Tasker for helping with this
* Bump framework/cms to ^4.0@dev
* WIP Silverstripe 4 compatibility fixes
* more replacements and patches to migrate this module to 4.0
* Update composer.json
* remove php <5.5 from travis.yml
* WIP more SS4 compatibility fixes
* WIP fix solr path to use DIR, avoid hardcoded module name
* WIP respect current include path
* WIP Namespacing and use on SearchIndex class
* Namespacing for tests
* WIP add namespaces to all classes
* Second push of Test changes + namespacing
* WIP split Solr files with multiple classes into single file / single class. Adjust namespaces
* Fix PHP errors in test
* break out search components with multiple classes into individual files and change namespaces
* Update namespacing for Search indexes and variants in tests
* Batch fixes for tests #2
* Update _config.php to use namespace
* Use root namespace in referencing Apache_Solr_Document
* Migrate task names so that the name is not fully qualified
2017-04-25 20:46:35 +12:00

60 lines
1.2 KiB
PHP

<?php
namespace SilverStripe\FullTextSearch\Utils;
use Iterator;
class MultipleArrayIterator implements Iterator
{
protected $arrays;
protected $active;
public function __construct()
{
$args = func_get_args();
$this->arrays = array();
foreach ($args as $arg) {
if (is_array($arg) && count($arg)) {
$this->arrays[] = $arg;
}
}
$this->rewind();
}
public function rewind()
{
$this->active = $this->arrays;
if ($this->active) {
reset($this->active[0]);
}
}
public function current()
{
return $this->active ? current($this->active[0]) : false;
}
public function key()
{
return $this->active ? key($this->active[0]) : false;
}
public function next()
{
if (!$this->active) {
return;
}
if (next($this->active[0]) === false) {
array_shift($this->active);
if ($this->active) {
reset($this->active[0]);
}
}
}
public function valid()
{
return $this->active && (current($this->active[0]) !== false);
}
}