问题标签 [recursiveiterator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP SPL RecursiveIterator::getChildren() 究竟返回了什么?
我正在学习 Marcus Boerger 的标准 PHP 库 (SPL)。
我已经实现了我自己的 RecursiveIterator,它通过继承实现了Iterator
接口。它还实现Countable
.
我对current()、getChildren()和hasChildren方法感到困惑。记录在:http ://www.php.net/~helly/php/ext/spl/interfaceRecursiveIterator.html
如果
current()
引用:'返回当前元素',和getChildren()
返回,我引用,'当前元素的子迭代器'
如果像 的情况一样current()
,当前元素被认为是当前对象的子元素。
然后,文档肯定会指定 getChildren() 实际上返回相关节点的孙子节点。
因此迷茫。
在上面的类中,getChildren()
返回一个实现 RecursiveIterator 和 Countable 的对象。因为每个RecursableCountableIterableNode
对象都包含其他RecursableCountableIterableNode
对象的实例。我认为它是一种复合模式。
通过实验,我设法通过使用count()
(作为退出递归过程的终止条件)并foreach
遍历每个节点的子节点来对树执行递归操作。
有趣的是,实际上,count
特征隐式执行hasChildren
操作,而foreach
构造隐式执行getChildren
操作以执行递归遍历。
鉴于此,我认为为了成为一个实用的 RecursiveIterator,
getChildren
真的应该返回$this
而不是节点 atcurrent()
,并且hasChildren
真的应该返回布尔转换结果count($this)
这是正确的吗?
规格说明了一件事——我从字面上理解。但我的实践经验说明了另一个问题。
php - RecursiveIteratorIterator 和嵌套的 RecursiveArrayIterators
我一直在使用 RecursiveArrayIterators 将嵌套对象作为树处理。下面的代码让我很困扰,因为结果只返回了我期望的一些值。主要是,根节点似乎永远不会被迭代。我有一种感觉,我只是盯着它看了太久,但想确保我在正确的轨道上。
结果是...
根节点在哪里?
回答
斯文的回答让我过度劳累的大脑无法正确处理这个问题。这是我最后一点成功的代码,以防其他人尝试类似的事情。
php - 使用流包装器遍历 S3 存储桶
我正在尝试列出我的 Amazon S3 存储桶中的所有项目。我有几个嵌套目录。
- 目录1/
- 目录1/子目录1/
- 目录1/子目录2/
- 目录1/子目录3/
- 目录2/
- 目录2/子目录1/
- 目录2/子目录2/
- ...
每个子目录包含几个文件。我需要用这个文件结构得到一个嵌套数组。
我正在使用适用于 PHP 2.4.2 的 Amazon AWS 开发工具包
这是我的代码:
但是,结果仅列出存储桶中的文件,而不列出目录/子目录(带前缀的文件)或目录本身中的文件。
如果我遍历,($dir.'/folder')
则根本没有结果。
IIRecursiveIteratorIterator::SELF_FIRST
作为第二个参数传递给迭代器的构造函数,我只得到第一级目录——没有子目录。
如何使用 AWS 流包装器和 PHP RecursiveIterator 列出存储桶中所有目录中的所有文件?
我希望有一个人可以帮助我。
谢谢!
php - PHP递归迭代器的奇怪行为
我发现 PHP 递归迭代器的一个非常奇怪的行为。如果子数组键不是从 0 开始的数字键,它不会迭代子数组。示例如下:
以下按预期工作:
输出:
现在相同的代码,但子键从 2 开始:
输出为空。
是bug还是什么?PHP 版本为 5.3.27/Windows x86
php - 只获取主文件夹,不获取子文件夹
我想使用以下代码获取没有子文件夹的主文件夹:
就像现在一样,此代码打印
是否RecursiveDirectoryIterator
或RecursiveIteratorIterator
具有显示“这是主文件夹”的功能?还是我必须使用一些解决方法代码?如果是,该代码将如何显示?
php - 带有 PHP 目录的 RecursiveIterator
我想列出目录中的目录和文件,例如:
这个数组中的所有目录都在我网站的“web_public”目录中。但是其中还有一些我不想阅读的其他目录。完整的 web_public 是:
这是我正在做但不起作用的事情:
php - 压缩和下载目录后递归删除目录失败
我按照这个 SO 线程递归地删除了一个目录(见下面的代码)。问题是在压缩目录内容并下载 zip 文件后,我无法让这些命令执行它们的操作。
文件/文件夹权限似乎不是问题,因为正如我所说,如果不涉及文件夹压缩,代码就可以正常工作。
有人有想法么?
php - php递归迭代器在文件重命名时失败
我在将 RecursiveIteratorIterator 移至下一项时遇到问题。我有一个包含多个文件的目录,我正在尝试访问每个文件,重命名它,然后在上面做一些其他的事情。RecursiveIteratorIterator 从目录中选择第一个文件并成功重命名它。当我执行 $it->next() 时,它会保留在同一个文件上,并尝试查找已重命名为其他文件的文件。下面是我的代码示例。文件权限设置为 777。任何想法将不胜感激。
仅当我重命名文件时才会发生这种情况。如果我删除重命名功能,它会按预期移动到下一个项目。
}
php - 嵌套递归迭代器
我想使用 RecursiveIterator 接口遍历嵌套对象。HeadHunterEntity 对象可以有许多 CandidateEntities。我想在主循环中迭代所有 CandidateEntities,但是出了点问题。
我有这样的主循环:
RecursiveHunterCandidatesIterator
结果出乎意料,我在主循环中什么都没有:(
但是,如果我返回 $childIterator2 ,则主循环中会出现预期的结果:
$this->current()->getHuntedCandidates() 返回数组,所以它应该在主循环中,就像 $childIterator2 中的 fake 1,2,3 aray ...
我做错了什么?
php - RecursiveDirectoryIterator 和 Zip Archive 的速度有多快?
所以我想使用 RecursiveDirectoryIterator 压缩一个文件夹,它可以多快压缩一个非常复杂的目录,所有文件组合在一起不超过 600 MB 的大小?
这是正在使用的代码:
那么,压缩一个非常复杂的目录大约需要多长时间?它会面临任何内存问题吗?无论如何,我正在使用 ajax,所以它不会导致浏览器崩溃或浏览器页面变得无响应......但仍然需要多长时间?