草庐IT

ITERATOR

全部标签

Iterator集合底层原理

//Itr是ArrayList中的一个内部类privateclassItrimplementsIterator{intcursor;//indexofnextelementtoreturn光标,表示是迭代器里面的那个指针,默认指向0索引的位置intlastRet=-1;//indexoflastelementreturned;-1ifnosuch表示上一次操作的索引intexpectedModCount=modCount;Itr(){}publicbooleanhasNext(){returncursor!=size;}@SuppressWarnings("unchecked")publicE

php - 将实现 Iterator 的 PHP 类视为数组

如果我有一个实现Iterator接口(interface)的类,我可以手动控制foreach循环中的迭代方式。但是还有其他方法可以让我的对象表现得像数组吗?例如,假设我有一个类Guestbook实现了Iterator,这样我就可以迭代foreach(newGuestbook()as$entry)。但是,如果我想颠倒顺序怎么办?foreach(array_reverse(newGuestbook())as$entry)肯定不行,因为array_reverse只会接受一个数组。我想我想问的是,我可以将Iterator用于foreach循环以外的其他用途吗?谢谢。

PHP 的迭代器类

我正在使用PHP的SPL递归迭代器,尽管它们对我来说相当困惑,但我正在学习。我在一个项目中使用它们,我需要递归地抓取所有文件并从我的结果中排除文件夹。我最初是使用这种方法...$directory=newRecursiveDirectoryIterator($path);$iterator=newRecursiveIteratorIterator($directory,RecursiveIteratorIterator::CHILD_FIRST);foreach($iteratoras$fileinfo){if($fileinfo->isDir()){//skipdirectories

php - 为什么实现 ArrayAccess、Iterator 和 Countable 的类不能使用 array_filter()?

我有以下类(class):container[]=$value;}else{$this->container[$offset]=$value;}}publicfunctionoffsetExists($offset){returnisset($this->container[$offset]);}publicfunctionoffsetUnset($offset){unset($this->container[$offset]);}publicfunctionoffsetGet($offset){returnisset($this->container[$offset])?$this-

PHP 递归目录迭代器 - 忽略某些文件。

我有一个递归目录迭代器来从目录中选择文件。SKIP_DOTS允许我忽略'.'和“..”元素,但我希望也能够忽略“__MACOSX”目录和另一个其他隐藏文件,例如“.cache.php”$iterator=newRecursiveDirectoryIterator($directory);$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);$all_files=newRecursiveIteratorIterator($iterator);还有其他答案here和here但只是想知道是否有更清洁的方法?我希望PHPManua

php - iterator_to_array

DatePeriod是一个用于处理重复日期的PHP类。它的方法数量非常有限。所以当我想用重复日期做基本的数组函数时,我必须将它复制到一个数组中iterator_to_array.奇怪的是,复制它似乎会破坏它。有什么想法吗?$p=newDatePeriod(date_create('2008-01-01'),DateInterval::createFromDateString("+2days"),date_create('2008-12-31'));echocount(iterator_to_array($p));//183$a=iterator_to_array($p);echocou

php - 如何使用递归数组迭代器处理多维数组?

我正在尝试让这样的东西工作:functionposts_formatter(&$posts){foreach($postsas$k=>$v){if(is_array($v)){posts_formatter($v);}else{switch(strtolower($k)){#makeemailaddresseslowercasecase(strpos($k,'email')!==FALSE):$posts[$k]=strtolower($v);break;#makepostcodesuppercasecase(strpos($k,'postcode')!==FALSE):$posts[

php - 在 PHP 中评估类似 MongoDB 的 JSON 查询

考虑在此JSON对象中表达的以下(相当复杂的)查询:{"name":"KindleFire","sale":true,"price":{"$gt":199,"$lt":264},"price.vat":{//bogus,justtoshow$a['price.vat']==$a['price']['vat']"$lte":1.2},"$or":{"qty":{"$gt":30},"eta":{"$or":{"$lt":3,"$gt":30}}},"countriesAvailable":{"$in":["US","CA"]}}目标我想解析那个JSON,以便它计算为PHP等价物(其中$a

php - PHP 的 Iterator 方法 valid()、current() 和 next() 应该如何运行?

我正在使用来自MAMP的PHP5.3.6.我有一个用例,其中最好使用PHP的Iterator接口(interface)方法、next()、current()和valid()循环访问一个集合。foreach循环在我的特定情况下对我不起作用。一个简化的while循环可能看起来像valid()){//dosomethingwith$iter->current()$iter->next();}当$iter实现PHP的Iterator接口(interface)时,上面的代码是否应该始终有效?PHP的foreach关键字如何处理迭代器?我问的原因是我正在编写的代码可能会被赋予ArrayIterat

PHP 可迭代到数组或可遍历

我很高兴PHP7.1引入了theiterablepseudo-type.虽然这在循环这种类型的参数时很棒,但我不清楚当您需要将它传递给仅接受array或仅接受一个PHP函数时该怎么做可遍历。例如,如果你想做一个array_diff,而你的iterable是一个Traversable,你将得到一个array。相反,如果您调用一个接受迭代器的函数,如果iterable是一个array,您将得到一个错误。是否有类似iterable_to_array(不是:iterator_to_array)和iterable_to_traversable的东西?我正在寻找一种解决方案,避免在我的函数中使用条