问题标签 [spl]
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 ArrayObject 无法正常工作
我正在尝试扩展 SPL ArrayObject,但遇到了一些障碍。使用未修改的 ArrayObject,此代码有效:
产生这个输出:
但是,如果我扩展 ArrayObject 并重载 offsetGet 方法
然后它像这样失败:
使我的扩展类与多维数组一起工作需要什么?
php - PHP、SPL 预定义常量
我在哪里可以得到一些关于SPL predefined constants
likeSELF_FIRST
的参考资料CHILD_FIRST
?在php.net上我得到的不多(只是他们的类型)。
php - 如何使用 SPL 检索完整的目录树?
如何使用SPL
,可能使用RecursiveDirectoryIterator
and检索完整的目录树RecursiveIteratorIterator
?
php - 在 PHP 中迭代数组时向前看
在 PHP 5.2 中迭代数组时是否可以“窥视”?例如,我经常使用 foreach 来操作数组中的数据:
但是我经常需要在遍历数组时查看下一个元素。我知道我可以使用for
循环并通过它的索引 ( ) 引用下一项$array[$i+1]
,但它不适用于关联数组。我的问题是否有任何优雅的解决方案,可能涉及 SPL?
php - 为什么我必须倒带 IteratorIterator
如果我首先调用$iterIter->rewind(),则$iterIter->valid()为真。我很好奇为什么它需要调用 rewind() 。我想这是有充分理由的,但我原以为它会在内部迭代器所处的任何状态下简单地开始迭代,并将其作为在开始迭代之前回退的选项。
调用 next() 似乎也将其置于“有效”状态(尽管它前进到下一个位置,表明它之前位于第一个位置)。
同样,我很好奇为什么我需要调用 rewind(),尽管内部迭代器处于有效状态。
php - 将自定义 FileInfo 类设置为 Iterator 的正确方法
我正在尝试通过以下setInfoClass
方法将自定义类设置为迭代器:
使用此方法设置一个自定义类,该类将在调用 getFileInfo 和 getPathInfo 时使用。传递给此方法的类名必须派生自 SplFileInfo。
我的课是这样的(简化示例):
迭代器代码是这样的:
由于也是RecursiveDirectoryIterator
通过对象继承,因此它提供了方法。它没有在手册中列出,但反射显示它在那里:DirectoryIterator
SplFileInfo
setInfoClass
到这里为止一切都很好,但是当迭代目录时
我得到以下奇怪的结果
因此,当MyFileInfo
被拾起时,我无法访问它的属性。如果我添加自定义方法,我可以很好地调用它们,但任何属性都是未知的。
如果我没有将信息类设置为迭代器,而是设置为 SplFileInfo 对象(如手册中的示例所示),它将给出相同的 UNKNOWN 结果:
但是,当我这样做时它会起作用
不幸的是,我想在其中使用它的代码有点复杂,并且堆叠了更多的迭代器。不能像这样创建 MyFileInfo 类。
那么,有谁知道如何让它工作或为什么 PHP 表现得如此怪异?
谢谢。
php - PHP SPL 库的源代码在哪里?
我可以在以下位置找到定义文件,http://www.php.net/~helly/php/ext/spl/...
但我想扩展DirectoryIterator
和SplFileInfo
处理存储在数据库上的虚拟文件系统,而不是真正的文件系统。
php - 如何使用 PHP 的 SPL 从邻接列表中聚合结果
我尝试过使用嵌套集,但在处理多棵树和许多其他复杂情况时,它们变得非常难以维护。我想在这方面给 PHP 的 SPL 库一个尝试(顺便说一句,我们是 PHP 5.3,MySQL 5.1 )。
给定两个数据集:
团体:
这几项
这些数字实际上比这复杂得多(我实际上是在过去 15 年中汇总可变数量的月或年,因此可能需要 20 列汇总结果)。
编辑: @Gordon 我想有很多方法可以获取结果集。理想情况下,我希望 RecursiveIterator 的东西给我一些东西,我可以把它吐到一个包含所有业务逻辑的视图中(聚合叶节点等)已经完成..所以结果看起来像这样(注意邻接列表中的深度是任意的):
:结束编辑
我一直在试图弄清楚RecursiveIterator和IteratorAggregate,但是我很难找到足够通用的真实世界示例,以真正让我的头脑围绕这些类。
有人可以给我一个先机吗?
编辑:
这里不需要一个非常详细的解决方案。似乎不清楚我可以在哪里(如果有的话)利用 Iterator、RecursiveIterator、RecursiveIteratorIterator 等来提出一个干净、可扩展的解决方案来聚合分层数据。
:结束编辑
php - 一个 RecursiveParentChildIterator -- 像 RecursiveDirectoryIterator
有大量使用 RecursiveIterator 来展平树结构的示例.. 但是使用它来分解树结构呢?
有没有一种优雅的方式来使用它,或者其他一些 SPL 库来递归地构建一棵树(阅读:将平面数组转换为任意深度的数组)给定如下表:
编辑: 您知道如何使用目录执行此操作吗?
.. 如果你能做这样的事情怎么办:
:结束编辑
php - 迭代对象时出现 PHP 5.1.6 ArrayAccess 错误
我必须在 PHP 5.1.6 上开发一个站点,而我刚刚在我的站点中遇到了一个在 5.2+ 上没有发生的错误。使用 foreach() 遍历对象时,出现以下错误:“致命错误:在后/前递增/递减中用作数组的对象必须通过引用返回值...”
有谁知道如何解决这个问题?