SPL的常用迭代器(3)

1.迭代器的介绍
·什么是迭代器?
 -怎样获得链表中的每一个节点信息
  节点1<---->节点2<---->节点3
  ↑链表指针
通过某种统一的方式遍历链表或者数组中的元素的过程
叫做迭代遍历,而这种统一的遍历工具我们叫做迭代器


·PHP中迭代器是通过Iterator接口定义的
  节点1<--next()-->节点2<--next()-->节点3
  ↑current();


2.ArrayIterator迭代器
·ArrayIterator迭代器用于遍历数组
  -熟悉使用foreach和while语句通过ArrayIterator遍历数组的方法
  -熟悉使用seek跳过某些元素的方法
  -熟悉使用ArrayIterator进行排序的方法


实例:
<?php
$fruits = array(
"apple"=>'apple value',  //position=0
"orange"=>'orange value', //position=1
"grape"=>'grape value',
"plum"=>'plum value'
);
echo "<pre>";
print_r($fruits);
echo "</pre>";


echo "***** fenge *****<br>";


foreach ($fruits as $key => $value) {
echo $key.":".$value."<br>";
}


echo "<br>***** fenge *****<br>";


//使用ArrayIterator遍历数组
$obj  = new ArrayObject($fruits);
$it = $obj->getIterator();
while($it->valid()){
echo $it->key().":".$it->current()."<br>";
$it->next();
}


echo "<br>***** fenge *****<br>";


// 跳过某些元素进行打印
$it->rewind();
if($it->valid()){
$it->seek(1); //搜寻从数组下表为1开始找
while($it->valid()){
echo $it->key().":".$it->current()."<br>";
$it->next();
}
}


echo "<br>***** fenge *****<br>";


$it->ksort();  //可以按字母对键值进行排序
foreach ($it as $key => $value) {
echo $key.":".$value."<br>";
}


echo "<br>***** fenge *****<br>";


$it->asort();  //可以按字母对值进行排序
foreach ($it as $key => $value) {
echo $key.":".$value."<br>";
}
?>


3.AppendIterator迭代器
·AppendIterator能陆续遍历几个迭代器
 -按顺序迭代访问几个不同的迭代器。例如,希望在一次循环中迭代访问两个或者更多的组合。


实例:
<?php
$array_a = new ArrayIterator(array('a','b','c'));
$array_b = new ArrayIterator(array('d','e','f'));
$it = new AppendIterator();
$it->append($array_a);
$it->append($array_b);
// 通过append方法把迭代器对象添加到AppendIterator对象中
foreach($it as $key => $value){
echo $value."<br>";
}
?>


4.MultipleIterator迭代器
·MultipleIterator用于把多个Iterator里面的数据组合成为一个整体来访问


实例代码:
<?php
$idIter = new ArrayIterator(array('0','1','2'));
$nameIter = new ArrayIterator(array('张三','李四','王五'));
$ageIter = new ArrayIterator(array('22','23','25'));


$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);
$mit->attachIterator($idIter,"ID");
$mit->attachIterator($nameIter,"NAME");
$mit->attachIterator($ageIter,"AGE");
foreach ($mit as $key => $value) {
echo "<pre>";
print_r($value);
echo "</pre>";
}
?>


5.FilesystemIterator
·FilesystemIterator能遍历文件系统


实例:
<?php
date_default_timezone_set("PRC");
$it = new FileSystemIterator('.');
foreach ($it as $finfo) {
printf("%s&nbsp;%s&nbsp;%8s&nbsp;%s<br>",
date("Y-m-d H:i:s",$finfo->getMTime()),
$finfo->isDir()?"Dir":"",
number_format($finfo->getSize()),//格式化,每三位数加一逗号
$finfo->getFileName()
);
echo "<br>";
}
?>

猜你喜欢

转载自blog.csdn.net/qq402507269/article/details/50792319