note 113636 added to language.generators.syntax
| From: | ShumeykoDmitriy | Date: | Fri, 08 Nov 2013 07:46:25 +0000 |
| Subject: | note 113636 added to language.generators.syntax | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-197462@lists.php.net to get a copy of this message | ||
This is little example of using generators with recursion. Used version of php is 5.5.5
[php]
<?php
define ("DS", DIRECTORY_SEPARATOR);
define ("ZERO_DEPTH", 0);
define ("DEPTHLESS", -1);
define ("OPEN_SUCCESS", True);
define ("END_OF_LIST", False);
define ("CURRENT_DIR", ".");
define ("PARENT_DIR", "..");
function DirTreeTraversal($DirName, $MaxDepth = DEPTHLESS, $CurrDepth = ZERO_DEPTH)
{
if (($MaxDepth === DEPTHLESS) || ($CurrDepth < $MaxDepth)) {
$DirHandle = opendir($DirName);
if ($DirHandle !== OPEN_SUCCESS) {
try{
while (($FileName = readdir($DirHandle)) !== END_OF_LIST) { //read all file in directory
if (($FileName != CURRENT_DIR) && ($FileName != PARENT_DIR)) {
$FullName = $DirName.$FileName;
yield $FullName;
if(is_dir($FullName)) { //include sub files and directories
$SubTrav = DirTreeTraversal($FullName.DS, $MaxDepth, ($CurrDepth + 1));
foreach($SubTrav as $SubItem) yield $SubItem;
}
}
}
} finally {
closedir($DirHandle);
}
}
}
}
$PathTrav = DirTreeTraversal("C:".DS, 2);
print "<pre>";
foreach($PathTrav as $FileName) printf("%s\n", $FileName);
print "</pre>";
[/php]
----
Server IP: 192.41.45.150
Probable Submitter: 91.211.149.29
----
Manual Page -- http://php.net/manual/en/language.generators.syntax.php
Edit -- https://master.php.net/note/edit/113636
Del: integrated -- https://master.php.net/note/delete/113636/integrated
Del: useless -- https://master.php.net/note/delete/113636/useless
Del: bad code -- https://master.php.net/note/delete/113636/bad+code
Del: spam -- https://master.php.net/note/delete/113636/spam
Del: non-english -- https://master.php.net/note/delete/113636/non-english
Del: in docs -- https://master.php.net/note/delete/113636/in+docs
Del: other reasons-- https://master.php.net/note/delete/113636
Reject -- https://master.php.net/note/reject/113636
Search -- https://master.php.net/manage/user-notes.php