因为这似乎是我必须做的才能获得这种效果:$arr=['a'=>'first','b'=>'second',...];$iter=newArrayIterator($arr);//Doabunchofiterations...$iter->next();//...$new_iter=newArrayIterator($arr);while($new_iter->key()!=$iter->key()){$new_iter->next();}编辑:此外,为了清楚起见,我不应该使用unset()修改基本数组吗?我认为数组迭代器存储它自己的基本数组副本,因此使用offsetUnset()似乎不
我正在尝试克隆一个\ArrayIterator对象,但看起来克隆的对象仍在引用原始对象。$list=new\ArrayIterator;$list->append('a');$list->append('b');$list2=clone$list;$list2->append('c');$list2->append('d');//belowresultprints'4',iamexpectingresult'2'echo$list->count();有人对这种行为有解释吗?提前谢谢你。 最佳答案 虽然我很难找到明确说明的文档,但在内
我有两个迭代器,必须合并成一个结果。以下是数据示例:ArrayIteratorObject([storage:ArrayIterator:private]=>Array([0]=>Array([period]=>04/04/201216:00:00[bl_subs]=>1[bl_unsubs]=>1[bl_block_total]=>1)[1]=>Array([period]=>04/04/201217:00:00[bl_subs]=>1[bl_unsubs]=>2[bl_block_total]=>0)[2]=>Array([period]=>04/04/201218:00:00[b
我有一个扩展ArrayIterator的PHP类,并实现了所有必要的方法,使其表现得像一个数组。这适用于foreach循环之类的事情,但调用print_r它仍然打印出对象的变量,而不是像打印数组那样打印它。是否有某种方法可以覆盖此行为,以便调用print_r(我猜var_dump)将打印此对象的自定义输出? 最佳答案 不,因为它旨在提供有关变量的信息(即它用于调试),而不仅仅是提供它的一些字符串表示形式。你可以覆盖__toString虽然并使用echo。 关于php-是否可以在PHP中的
我代码中的数组很大,所以我将它粘贴到pastebin中。http://pastebin.com/6tviT2Xj我不明白为什么我会死循环这个脚本的逻辑是:$it=newArrayIterator($options);while($it->valid()){print$it->key();print$it->current();} 最佳答案 因为您永远不会在迭代器(withArrayIterator::next())中移动。while($it->valid()){...$it->next();}
好的,正如标题所说:与简单的foreach循环相比,使用ArrayIterator的主要好处是什么。我有一个用作容器的对象,它的主要职责是存储一个对象数组。有人建议我让我的类实现IteratorAggregate并返回一个ArrayIterator和我的对象数组:像这样:publicfunctiongetIterator(){returnnewArrayIterator($this->_objs);}与简单地返回数组然后使用标准的foreach循环遍历它们相比,我看不出这样做有什么好处。有人能解释一下为什么这是个好主意吗? 最佳答案
我在使用ArrayIterator时遇到了一些问题(事实上,ArrayObject也有同样的问题)。对于99%的一切,我扩展的ArrayIterator的行为就像一个数组,并且运行良好。不幸的是,implode()不喜欢被赋予ArrayIterator(或ArrayObject)。我在文档中找不到任何建议通过扩展ArrayIterator实现的任何其他类,也没有任何其他要覆盖的方法。任何人都可以建议如何让它工作吗?(注意:每次我使用implode时都转换为数组不是解决方案,因为我希望这个类似数组的对象完全像数组一样工作,并且没有使用它的代码必须知道/关心/转换)
我试图理解PHP中对象数组的概念。到目前为止,我只是简单地使用常规数组来遍历记录列表并将它们显示在表中。我知道我可以使用Object来做到这一点,但我不太确定该怎么做。我理解单个Object实例的概念,其中所有属性表示字段及其相关值从数据库中填充,可以这样调用:$objUser->first_name;现在我想了解但根本找不到简单答案的是如何处理比方说我想在一页上显示的用户列表。我已经看到有ArrayObject、ArrayIterator等,但根本无法理解它们是如何工作的,所以如果有人可以尝试用几个例子来解释它,说明如何实现上述目标,我们将不胜感激。我正在寻找的是一个包含元素列表的对
我怀疑我在这里做了一些愚蠢的事情,但我对SPL的一个看似简单的问题感到困惑:如何使用RecursiveArrayIterator修改数组的内容(本例中的值)/RecursiveIteratorIterator?使用以下测试代码,我可以使用getInnerIterator()更改循环内的值和offsetSet(),并在循环中转储修改后的数组。但是当我离开循环并从迭代器中转储数组时,它又回到了原始值。发生了什么事?$aNestedArray=array();$aNestedArray[101]=range(100,1000,100);$aNestedArray[201]=range(300
我怀疑我在这里做了一些愚蠢的事情,但我对SPL的一个看似简单的问题感到困惑:如何使用RecursiveArrayIterator修改数组的内容(本例中的值)/RecursiveIteratorIterator?使用以下测试代码,我可以使用getInnerIterator()更改循环内的值和offsetSet(),并在循环中转储修改后的数组。但是当我离开循环并从迭代器中转储数组时,它又回到了原始值。发生了什么事?$aNestedArray=array();$aNestedArray[101]=range(100,1000,100);$aNestedArray[201]=range(300