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

0 投票
1 回答
136 浏览

php - 为过时对象的集合选择数据结构

我正在尝试设计一个 PHP 对象(称为它Incident_Collection),它将包含其他对象的集合,每个对象都实现一个Incident接口。

起初我想我只是制作我的Incident_Collection实现IteratorAggregate并将 Incident 对象存储在集合的数组属性中:

但是由于Incident对象具有自然顺序,我认为扩展其中一个SPL 数据结构可能更合适/更有效。但是哪一个?我不太清楚何时使用特定的数据结构。

另一个问题是Incident_Collection. 例如,如果有一个具有 的Person对象,则Incident_Collection可能会应用以下限制:

  • 仅 1Birth起事件
  • 如果Birth存在,它必须是集合中最早的事件
  • 仅 1Death起事件
  • 如果Death存在,它必须是集合中的最后一个事件
  • HS_Graduation必须紧随其后HS_Begin

Incident_Collection拥有一个接受其所有者(例如Person)的一组限制的泛型或子类会更好Person_Incident_Collection吗?

0 投票
2 回答
594 浏览

php - PHP SPL - 是否有任何接口或类来控制转换为数组时会发生什么?

因此,通过实现IteratorArrayAccessCountable内置接口,我们可以控制在foreach循环中使用对象或访问属性时,对象内部会发生什么,就好像它是数组索引($object['id'])一样。

例如,如果您愿意,您可以对其进行设置,以便$object['version'] += 1自动增加version数据库中的字段。

缺少的是投射objectto array。是否有任何接口或类可以控制您执行以下操作时发生的情况:(array) $object?任何内置的接口或类,无论多么晦涩难懂?例如:如果我想(array) $object返回$this->propertyArray而不是转储所有公共对象属性的普通对象到数组转换?

注意:像要求$object->toArray()通过方法名调用这样的东西不算数,因为这个想法是尽可能地减少数组和对象之间的外部差异。

0 投票
1 回答
305 浏览

php - SplPriorityQueue 按升序排列

下面显示了 SplPriorityQueue 将最高优先级赋予最大优先级值,在这种情况下,对应于最新日期。

给定任意一组日期作为优先级,如何使 SplPriorityQueue 的内容以升序而不是降序的日期顺序出现?

ETA:我有一种使用 Unix 时间戳的笨拙方式。但这在 Unix 时代之外失败了。

有没有更健壮的方法?

0 投票
1 回答
1150 浏览

php - 将对象集合限制为唯一集合

目前我有一个名为Collection. 它使用一个数组来保存一组独特的对象。它们是唯一的,不是因为它们具有不同的内存地址(尽管显然它们确实如此),而是因为集合中没有等效的对象。

我一直在阅读关于SplObjectStorage哪个比数组具有显着的速度优势并且可能比我的Collection班级更容易维护的信息。我的问题是它SplObjectStorage不关心等同性,只关心身份。例如:

所以我一直在考虑如何子类化SplObjectStorage,这样它attach()就会受到对象等效性的限制,但到目前为止,它涉及将$data对象设置为“等效签名”,这似乎需要遍历数据结构,直到我找到(或没有)一个匹配的值。

例如:

有没有更好的办法?

0 投票
1 回答
1539 浏览

php - 使用 count() 计算实现 ArrayAccess 的对象的元素?

当一个类实现了ArrayAccess接口时,它就可以作为一个数组使用了,包括 OffsetGet、OffsetSet 等等。

我没有看到的一件事是当我们想要count()sizeof()它时的实现,在我对 PHP 的有限了解中,它相当于相同。

有没有类似的东西已经在标准 PHP 中实现了?

0 投票
11 回答
34080 浏览

php - 使用 PHP - SPL 解决方案反向遍历数组?

PHP 中是否有 SPL 反向数组迭代器?如果没有,实现它的最佳方法是什么?

我可以简单地做

或者

但是有没有更优雅的方式呢?

0 投票
1 回答
1113 浏览

php - 什么是 php 中的对象迭代

谁能解释什么是对象迭代以及这段代码是如何工作的?

0 投票
1 回答
945 浏览

php - 如何使用 PHP 5.3 序列化 SplFileObject?

我正在尝试序列化一个 SplFileObject,它在 5.2 中静默失败并在 5.3 中引发致命错误。到目前为止,我已经解决了 5.2 中的问题,方法是继承 SplFileObject 并使用(简化)以下代码实现 Serializable 接口(完整版还处理 $open_mode 和 $context 但这与该问题无关):

但 5.3 仍然会抛出致命的:

我也尝试添加魔法__sleep__wakeup方法,但无济于事。

谷歌似乎对此知之甚少,所以我想知道是否有可能在 5.3 中序列化一个 SplFileObject。

更新:似乎那个问题没有答案(参见我的评论)。

0 投票
1 回答
1877 浏览

php - 如何使用 RecursiveDirectoryIterator 循环引用当前目录名、文件名和文件内容?

在下面的脚本中,我试图遍历 $base 文件夹中的文件夹和文件。我希望它包含单级子文件夹,每个子文件夹都包含许多 .txt 文件(并且没有子文件夹)。

我只需要了解如何在下面的评论中引用元素...

非常感谢任何帮助。我真的很接近结束这个:-)

0 投票
2 回答
1575 浏览

php - 使用 SPL 的 DirectoryTreeIterator 对每个目录的文件进行排序

我发现了几个与 SPL 迭代器相关的问题(这个这个问题),但我不确定它们是否对我的情况有帮助,因为我使用的是 ; 的相当高级别的扩展RecursiveIteratorIteratorDirectoryTreeIterator. _

有人可以告诉我DirectoryTreeIterator在迭代器输出后如何更改或如何对每个目录返回的数组进行排序吗?

如果可以使用.htaccess例如,直接在 Apache 服务器上正确排序文件的方法对我来说也是一种选择。

这是DirectoryTreeIterator来自 SPL 的代码:

澄清为什么我使用上面的代码是因为它完全符合我的需求。我想生成一个以空格为前缀的递归目录树——Marcus Boerger 的原始代码示例添加了一些 ASCI 元素。问题是我无法控制文件和目录的排序,所以我希望目录树看起来像这样:

相反,迭代器返回的列表根本没有排序,它向我显示了如下内容:

所以我想我正在寻找的解决方案是每次索引子目录并添加到目录树时调用排序方法的某种方式。

我希望我已经把它说得更清楚了,作为一个非母语的人,有时很难将想法变成连贯的句子(甚至是单词)。