Итераторы в PHP5

ReMaRk

Новичок
Итераторы в PHP5

Кто-нибудь замарачивался с итераторами в пятой версии PHP? Дайте ссылок на ресурсы (желательно на русском) где об это написано подробнее чем это есть в стандартной документации, где практически ничего не документировано.

P.S. Ссылку на http://cvs.php.net/pecl/spl/ давать не надо.
 

ReMaRk

Новичок
Макс
Спасибо за ссылку - интересная =)

Но все же хочется на человеческом уровне понять про итераторы (что такое итератор - знаю), как ими пользоваться представляю и некоторые вещи получается применять на практике, но остальное дремучий лес!!!
 

Profic

just Profic (PHP5 BetaTeam)
А что еще не понятно?
Была статья на zend.com там как раз был пример который ничего не делает, а выводит что он делает из него + рефлектора я все понял про итераторы
 

ReMaRk

Новичок
Profic
непонятно как совмещать эти итераторы для достижения своих целей.
Например мне надо прочитать некую директорию используя итераторы так, чтоб на первом уровне мне попадали все поддиректории, на втором поддиректории с определенным именем, а на третьем - файл с определенным расширением. Как мне это сделать - ума не приложу!!!
 

Фанат

oncle terrible
Команда форума
Никак, естественно.
директорию надо прочитать в массив, отсортировать как нужно, а потом итераторами своими как угодно по этому массиву ходить
 

ReMaRk

Новичок
Фанат
Какая разница в данной ситуации?! Ходить по директориям при помощи итераторов или по массиву?
 

lucas

Guest
Например мне надо прочитать некую директорию используя итераторы так, чтоб на первом уровне мне попадали все поддиректории, на втором поддиректории с определенным именем, а на третьем - файл с определенным расширением. Как мне это сделать - ума не приложу!!!
DirectoryIterator :D
 

ReMaRk

Новичок
lucas
Да, но при этом надо еще фильтры применять! Надо скрестить их, но очень грамотно. Пока что у меня не получилось
 

Фанат

oncle terrible
Команда форума
ему не прочитать надо.
ему надо прочитать непременно с использованием итераторов.
без использования итераторов будет не кошерно.
 

robocomp

Новичок
Re: Итераторы в PHP5

Автор оригинала: ReMaRk
Кто-нибудь замарачивался с итераторами в пятой версии PHP?
Ссылок не дам, но поумничать случая не упущу. Насколько мне кажется, итераторы нужны для создния объекто-ориентированного интерфейса для доступа, скажем так, к массивам.

И, собственно, все.

-~{}~ 28.06.05 18:39:

Описание шаблона
Итератор можно увидеть. Тоже, наверное, объясняет кое-кто.
 

ReMaRk

Новичок
robocomp
Насколько мне кажется, итераторы нужны для создния объекто-ориентированного интерфейса для доступа, скажем так, к массивам.
Не согласен, при чем здесь массив и directoryIterator, который шастает по файловой системе?

-~{}~ 28.06.05 20:43:

Фанат
при чем здесь кошерно, ни кошерно?? Дело в том, что зачем кучу кода плодить для определенной задачи, когда для нее уже есть инструменты, которые вполне можно использовать, другое дело - не получается из-за не знания (не понимания). Вот я и хочу ими воспользоваться, потому что они то, что мне надо.
Для чего, скажите мне, итераторы были придуманы, чтоб на полке пылились???
 

su1d

Старожил PHPClubа
ReMaRk
надо прочитать некую директорию используя итераторы так, чтоб на первом уровне мне попадали все поддиректории, на втором поддиректории с определенным именем, а на третьем - файл с определенным расширением. Как мне это сделать - ума не приложу!!!

Фанат
Никак, естественно.
директорию надо прочитать в массив, отсортировать как нужно, а потом итераторами своими как угодно по этому массиву ходить
Фанат, я бы заменил слово "ествественно" на "насколько мне известно". =)

PHP:
<?php

class myFilterIterator extends FilterIterator {
	function accept() {
		switch($this->getDepth()) {
			case 1 :
				return $this->isDir();

			case 2 :
				return $this->isDir() && preg_match('~^[\.\~].+~', $this->getFilename());

			case 3 :
				return $this->isFile() && '.php' == substr($tmp=$this->getFilename(), strrpos($tmp,'.'));
		}

		return false;
	}
}

foreach(new myFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator('./'))) as $D) {
	echo $D->getPath();
	echo "\t";
	echo $D->getFilename();
	echo "\n";
}

?>
 
Сверху