PHP: реализация интерфейса SeekableIterator - PullRequest
1 голос
/ 29 декабря 2008

В настоящее время я пишу класс, который реализует интерфейс SeekableIterator и столкнулся с проблемой. У меня есть два внутренних массива, которые я использую, и я хотел бы разрешить итерации по обоим из-за пределов класса. Есть ли простой способ сделать это без предварительного объединения двух массивов в классе? Вот быстрый пример того, что я пытаюсь сделать:

class BookShelf implements ArrayAccess, Countable, SeekableIterator {
    protected $_books = array(...);
    protected $_magazines = array(...);

    /**** CLASS CONTENT HERE ****/
}

$shelf = new BookShelf();

// Loops through both arrays, first books (if any) and then magazines (if any)
foreach($shelf as $item) {
    echo $item;
}

1 Ответ

1 голос
/ 29 декабря 2008

Предполагая, что оба массива имеют числовую индексацию, если текущий индекс меньше

count($this->_books);

затем верните

$this->_books[$index];

В противном случае, если индекс меньше чем count (книги) + count (журналы), вернуть

$this->_magazines[$index-count($this->_books)]

В противном случае OutOfBoundsException может быть в порядке.

Все остальное должно просто встать на свои места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...