问题标签 [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.
php - ORM 查询结果:数组与结果句柄包装在迭代器接口中
好的,这是专业人士的:
几年来,我一直在研究我自己的 PHP ORM/ActiveRecord 实现,我将其命名为Pork.dbObject。
它大致基于几年前我们都看过的“在 5 分钟内用 Rails 制作自己的网站”电影。您可以执行以下操作:
或者
或者
这将从数据库中获取一行或多行,将它们包装在一个 dbObject 中并将它们返回到一个数组中,或者返回 false 没有结果。
所有这一切都在几十个站点和后端完美运行,但现在我的同事正在使用它来创建一个巨大的日志解析器,这里开始出现内存使用问题..
他运行的查询可以返回超过 20.000 行,甚至可能更多,这当然不是一件很好的事情,一次包装到一个对象包装器中并作为单个数组返回。
显而易见的解决方案是返回一个实现Iterator接口的对象,而不是一个数组。它不应该立即从结果集中获取所有记录,而只是保存生成的数据库查询的结果资源,并在您遍历对象时在内部使用 mysql_fetch_* ,就好像它是一个数组一样。
现在我们来解决我真正的问题:我可以毫无问题地这样做吗?数据库是否能够处理多个打开的结果集,并将它们混合并在内存中保存一段时间?
例如,获取 20 个对象,循环它们,让这 20 个对象中的每一个获取另外 5 个对象,然后它们也获取另外 3 个对象。这将创建一个循环,其中许多不同的结果句柄将保存在内存中。
我知道我无法序列化这些对象之一,但我能否在 PHP5 中毫无问题地实现这一点,或者数据库接口会给我带来问题?
php - 如何在使用 RecursiveArrayIterator 时更改数组键和值?
我怀疑我在这里做了一些愚蠢的事情,但我对 SPL 的一个简单问题感到困惑:
如何使用RecursiveArrayIterator / RecursiveIteratorIterator修改数组的内容(本例中的值) ?
使用以下测试代码,我可以使用getInnerIterator()和offsetSet()更改循环内的值,并在循环内转储修改后的数组。
但是当我离开循环并从迭代器中转储数组时,它又回到了原始值。发生了什么?
php - 在 RecursiveIteratorIterator 中实现 RecursiveArrayIterator 时访问数组对象变量
我有一个大的arrayObject,我正在使用以下内容进行循环:-
如何访问数组中的特定键?我可以通过回显 $key 和 $val 来访问它们,但我有我希望访问的特定密钥。如果我尝试调用 $key[''] 我会得到键名的第一个字母。
编辑 1
一些示例数据(也可以有许多不同的子子项):
php - PHP中ArrayIterator、ArrayObject和Array的区别
有人可以清楚地解释 PHP和PHP 在功能和操作方面ArrayIterator
的根本区别吗?谢谢!ArrayObject
Array
php - 为什么要实现两个已经相互扩展的接口?
我想了解一些关于ArrayObject
和ArrayIterator
类的东西
ArrayObject
: 这个类实现了IteratorAggregate
和Traversable
接口。既然IteratorAggregate
扩展Traversable
了自己,为什么ArrayObject
在它可以实现的时候同时实现IteratorAggregate
呢?
ArrayIterator
:如上,这个类实现了两者并Iterator
扩展了。Traversable
Iterator
当这些类可以实现扩展接口时,为什么要实现两个接口Traversable
?
php - 扩展 ArrayIterator 和修改数组存储
在扩展 ArrayIterator 时,如何访问当前数组来修改它?或从中获取一些其他数据?
请考虑以下示例:
是使用$this->getArrayCopy()
而不是???
好吗?有没有更好的解决方案来做到这一点?性能呢?
以及如何动态更改类数组?例如使用 array_walk。
问候,
php - Php、Spl、ArrayIterator
我试图理解一段代码:
我试图理解的是为什么offSetUnset将指针指向数组中的第二个元素而不是第一个元素,我的理论是以下事件序列:
当 offSetUnset 被调用时,指针指向元素 0,offSetUnset 等到 foreach 请求一个元素,然后 offSetUnset 知道它可以行动,所以当它发生时,它会删除之前给定的元素,当它完成迭代时,它会转到下一个元素,这就是为什么我认为在 offSetUnset 重置 foreach 循环后我们会丢失 0 元素。
但正如我所说,这只是我在问这里之前提出的一个理论,所以如果有人可以带我通过事件序列让我们失去 0 元素,谢谢大家,祝你有美好的一天。
php - PHP If 切换为具有未知的多维数组
只是好奇是否有办法在If
开关中做到这一点
我目前正在这样做,但认为可能有更好的方法