问题标签 [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.

0 投票
1 回答
409 浏览

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而不是节点 at current(),并且
  • hasChildren真的应该返回布尔转换结果count($this)

这是正确的吗?

规格说明了一件事——我从字面上理解。但我的实践经验说明了另一个问题。

0 投票
1 回答
999 浏览

php - RecursiveIteratorIterator 和嵌套的 RecursiveArrayIterators

我一直在使用 RecursiveArrayIterators 将嵌套对象作为树处理。下面的代码让我很困扰,因为结果只返回了我期望的一些值。主要是,根节点似乎永远不会被迭代。我有一种感觉,我只是盯着它看了太久,但想确保我在正确的轨道上。

结果是...

根节点在哪里?

回答

斯文的回答让我过度劳累的大脑无法正确处理这个问题。这是我最后一点成功的代码,以防其他人尝试类似的事情。

0 投票
1 回答
1991 浏览

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 列出存储桶中所有目录中的所有文件?

我希望有一个人可以帮助我。

谢谢!

0 投票
0 回答
78 浏览

php - PHP递归迭代器的奇怪行为

我发现 PHP 递归迭代器的一个非常奇怪的行为。如果子数组键不是从 0 开始的数字键,它不会迭代子数组。示例如下:

以下按预期工作:

输出:

现在相同的代码,但子键从 2 开始:

输出为空。

是bug还是什么?PHP 版本为 5.3.27/Windows x86

0 投票
1 回答
191 浏览

php - 只获取主文件夹,不获取子文件夹

我想使用以下代码获取没有子文件夹的主文件夹:

就像现在一样,此代码打印

是否RecursiveDirectoryIteratorRecursiveIteratorIterator具有显示“这是主文件夹”的功能?还是我必须使用一些解决方法代码?如果是,该代码将如何显示?

0 投票
2 回答
120 浏览

php - 带有 PHP 目录的 RecursiveIterator

我想列出目录中的目录和文件,例如:

这个数组中的所有目录都在我网站的“web_public”目录中。但是其中还有一些我不想阅读的其他目录。完整的 web_public 是:

这是我正在做但不起作用的事情:

0 投票
2 回答
338 浏览

php - 压缩和下载目录后递归删除目录失败

我按照这个 SO 线程递归地删除了一个目录(见下面的代码)。问题是在压缩目录内容并下载 zip 文件后,我无法让这些命令执行它们的操作。

文件/文件夹权限似乎不是问题,因为正如我所说,如果不涉及文件夹压缩,代码就可以正常工作。

有人有想法么?

0 投票
0 回答
201 浏览

php - php递归迭代器在文件重命名时失败

我在将 RecursiveIteratorIterator 移至下一项时遇到问题。我有一个包含多个文件的目录,我正在尝试访问每个文件,重命名它,然后在上面做一些其他的事情。RecursiveIteratorIterator 从目录中选择第一个文件并成功重命名它。当我执行 $it->next() 时,它会保留在同一个文件上,并尝试查找已重命名为其他文件的文件。下面是我的代码示例。文件权限设置为 777。任何想法将不胜感激。

仅当我重命名文件时才会发生这种情况。如果我删除重命名功能,它会按预期移动到下一个项目。

}

0 投票
1 回答
37 浏览

php - 嵌套递归迭代器

我想使用 RecursiveIterator 接口遍历嵌套对象。HeadHunterEntity 对象可以有许多 CandidateEntities。我想在主循环中迭代所有 CandidateEntities,但是出了点问题。

我有这样的主循环:

RecursiveHunterCandidatesIterator

结果出乎意料,我在主循环中什么都没有:(

但是,如果我返回 $childIterator2 ,则主循环中会出现预期的结果:

$this->current()->getHuntedCandidates() 返回数组,所以它应该在主循环中,就像 $childIterator2 中的 fake 1,2,3 aray ...

我做错了什么?

0 投票
0 回答
405 浏览

php - RecursiveDirectoryIterator 和 Zip Archive 的速度有多快?

所以我想使用 RecursiveDirectoryIterator 压缩一个文件夹,它可以多快压缩一个非常复杂的目录,所有文件组合在一起不超过 600 MB 的大小?

这是正在使用的代码:

那么,压缩一个非常复杂的目录大约需要多长时间?它会面临任何内存问题吗?无论如何,我正在使用 ajax,所以它不会导致浏览器崩溃或浏览器页面变得无响应......但仍然需要多长时间?