问题标签 [arrayiterator]

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 回答
1086 浏览

php - ORM 查询结果:数组与结果句柄包装在迭代器接口中

好的,这是专业人士的:

几年来,我一直在研究我自己的 PHP ORM/ActiveRecord 实现,我将其命名为Pork.dbObject。

它大致基于几年前我们都看过的“在 5 分钟内用 Rails 制作自己的网站”电影。您可以执行以下操作:

或者

或者

这将从数据库中获取一行或多行,将它们包装在一个 dbObject 中并将它们返回到一个数组中,或者返回 false 没有结果。

所有这一切都在几十个站点和后端完美运行,但现在我的同事正在使用它来创建一个巨大的日志解析器,这里开始出现内存使用问题..

他运行的查询可以返回超过 20.000 行,甚至可能更多,这当然不是一件很好的事情,一次包装到一个对象包装器中并作为单个数组返回。

显而易见的解决方案是返回一个实现Iterator接口的对象,而不是一个数组。它不应该立即从结果集中获取所有记录,而只是保存生成的数据库查询的结果资源,并在您遍历对象时在内部使用 mysql_fetch_* ,就好像它是一个数组一样。

现在我们来解决我真正的问题:我可以毫无问题地这样做吗?数据库是否能够处理多个打开的结果集,并将它们混合并在内存中保存一段时间?

例如,获取 20 个对象,循环它们,让这 20 个对象中的每一个获取另外 5 个对象,然后它们也获取另外 3 个对象。这将创建一个循环,其中许多不同的结果句柄将保存在内存中。

我知道我无法序列化这些对象之一,但我能否在 PHP5 中毫无问题地实现这一点,或者数据库接口会给我带来问题?

0 投票
7 回答
5885 浏览

php - 如何在使用 RecursiveArrayIterator 时更改数组键和值?

我怀疑我在这里做了一些愚蠢的事情,但我对 SPL 的一个简单问题感到困惑:

如何使用RecursiveArrayIterator / RecursiveIteratorIterator修改数组的内容(本例中的值) ?

使用以下测试代码,我可以使用getInnerIterator()offsetSet()更改循环内的值,并在循环内转储修改后的数组。

但是当我离开循环并从迭代器中转储数组时,它又回到了原始值。发生了什么?

0 投票
2 回答
1042 浏览

php - 在 RecursiveIteratorIterator 中实现 RecursiveArrayIterator 时访问数组对象变量

我有一个大的arrayObject,我正在使用以下内容进行循环:-

如何访问数组中的特定键?我可以通过回显 $key 和 $val 来访问它们,但我有我希望访问的特定密钥。如果我尝试调用 $key[''] 我会得到键名的第一个字母。

编辑 1

一些示例数据(也可以有许多不同的子子项):

0 投票
5 回答
3533 浏览

c++ - 迭代器比数组 [i] 快吗?

可能重复:
为什么使用迭代器而不是数组索引?

因为在我的一生中,我无法弄清楚它们是如何不多余的。

也许他们更快?

0 投票
7 回答
20980 浏览

php - PHP中ArrayIterator、ArrayObject和Array的区别

有人可以清楚地解释 PHP和PHP 在功能和操作方面ArrayIterator的根本区别吗?谢谢!ArrayObjectArray

0 投票
1 回答
354 浏览

php - 为什么要实现两个已经相互扩展的接口?

我想了解一些关于ArrayObjectArrayIterator类的东西

ArrayObject: 这个类实现了IteratorAggregateTraversable接口。既然IteratorAggregate扩展Traversable了自己,为什么ArrayObject在它可以实现的时候同时实现IteratorAggregate呢?

ArrayIterator:如上,这个类实现了两者并Iterator扩展了。TraversableIterator

当这些类可以实现扩展接口时,为什么要实现两个接口Traversable

0 投票
1 回答
1906 浏览

php - 扩展 ArrayIterator 和修改数组存储

在扩展 ArrayIterator 时,如何访问当前数组来修改它?或从中获取一些其他数据?

请考虑以下示例:

是使用$this->getArrayCopy()而不是???好吗?有没有更好的解决方案来做到这一点?性能呢?

以及如何动态更改类数组?例如使用 array_walk。

问候,

0 投票
2 回答
860 浏览

php - Php、Spl、ArrayIterator

我试图理解一段代码:

我试图理解的是为什么offSetUnset将指针指向数组中的第二个元素而不是第一个元素,我的理论是以下事件序列:

当 offSetUnset 被调用时,指针指向元素 0,offSetUnset 等到 foreach 请求一个元素,然后 offSetUnset 知道它可以行动,所以当它发生时,它会删除之前给定的元素,当它完成迭代时,它会转到下一个元素,这就是为什么我认为在 offSetUnset 重置 foreach 循环后我们会丢失 0 元素。

但正如我所说,这只是我在问这里之前提出的一个理论,所以如果有人可以带我通过事件序列让我们失去 0 元素,谢谢大家,祝你有美好的一天。

0 投票
4 回答
690 浏览

php - 为什么迭代 ArrayIterator 以无限循环结束?

我的代码中的数组很大,所以我将它粘贴到 pastebin 中。http://pastebin.com/6tviT2Xj

我不明白为什么我会陷入无限循环

这个脚本的逻辑是:

0 投票
2 回答
106 浏览

php - PHP If 切换为具有未知的多维数组

只是好奇是否有办法在If开关中做到这一点

我目前正在这样做,但认为可能有更好的方法