SPL常用迭代器
ArrayIterator
- 熟悉使用seek()跳过元素
- 熟悉使用asort,ksort排序
<?php $fruits = array( 'apple'=>'apple value', 'orange' => 'orange value', 'grape' => 'grape value', 'pear' => 'pear value' ); print_r($fruits);//打印数组 echo '*******user fruits directly'.PHP_EOL; foreach ($fruits as $key => $value) { # code... echo $key.':'.$value.PHP_EOL; } //使用ArrayIterator遍历数组 $obj = new ArrayObject($fruits); $it = $obj -> getIterator();//获得迭代器 echo '*******user ArrayIterator in for'.PHP_EOL; foreach ($it as $key => $value) { # code... echo $key.':'.$value.PHP_EOL; } echo '*******user ArrayIterator in while'.PHP_EOL; $it -> rewind();//调用current之前一定要先调用rewind while ($it -> valid()) { echo $it -> key().':'.$it->current().PHP_EOL; $it -> next();//这个必须加上,要不然死循环 } //跳过某些元素进行打印 echo '*******user seek before while'.PHP_EOL; $it ->rewind(); if($it->valid()){ $it->seek(1);//跳过第一个元素 while ($it -> valid()) { echo $it -> key().':'.$it->current().PHP_EOL; $it -> next();//这个必须加上,要不然死循环 } } echo '*******user ksort'.PHP_EOL; $it->ksort();//对key字典排序 foreach ($it as $key => $value) { # code... echo $key.':'.$value.PHP_EOL; } echo '*******user asort'.PHP_EOL; $it->asort();//对value字典排序 foreach ($it as $key => $value) { # code... echo $key.':'.$value.PHP_EOL; }
AppendIterator
- 能陆续遍历几个迭代器
- -按顺序迭代几个不同的迭代器,例如,希望在一次循环中迭代访问两个或多个组合
<?php $array_a = new ArrayIterator(array('a','b','c','d')); $array_b = new ArrayIterator(array('e','f','e','g')); $it = new AppendIterator(); $it ->Append($array_a); //通过append方法把迭代器对象添加到AppendIterator对象中 $it -> append($array_b); foreach ($it as $key => $value) { # code... echo $value.PHP_EOL; }
MultipleIterator
- 一个迭代器,依次遍历所有附加的迭代器
- 用于把多个Iterator里面的数据组合成一个整体来访问
<?php ini_set('display_errors', '1'); error_reporting(E_ALL); $id_iter = new ArrayIterator(array('01','02','03')); $name_iter = new ArrayIterator(array('张三','李四','王五')); $age_iter = new ArrayIterator(array('21','22','23')); $mit = new MultipleIterator (MultipleIterator::MIT_KEYS_ASSOC); $mit -> attachIterator($id_iter,'ID'); $mit -> attachIterator($name_iter,'name'); $mit -> attachIterator($age_iter,'age'); foreach ($mit as $key => $value) { # code... print_r($value); }
FilesystemIterator
遍历文件系统
<?php //显示当前目录下的所有文件、大小、创建时间 $it = new FileSystemIterator('.'); date_default_timezone_set('PRC'); foreach ($it as $key => $file_info){ # code... printf('%s\t%s\t%8s\t%s\n', date('Y-m-d H:i:s',$file_info->getMTime()), $file_info->isDir() ? "<dir>" : '', number_format($file_info->getsize()), $file_info->getFileName() ); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)