1. 程式人生 > >SPL的常用迭代器(3)

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>";
}
?>