php關於Iterator (迭代)

來源:互聯網
上載者:User

關於Iterator (迭代)
一. PHP中最簡單的迭代形式是foreach語句.

foreach 可以用於數組, 例如:
foreach ($arr as $key=>$value) { echo $key.’ ‘.$value.’/n’;}
foreach 也可以用於對象, 例如:
foreach ($obj as $property) {echo $property.’/n’;}
注意: 如果在對象之外用這條語句只能輸出公有的屬性,不能輸出私人的和保護的屬性.

二.以下幾個樣本有助於理解iterator, 其中DirectoryIterator, RecursiveDirectoryIterator, LimitIterator都是PHP預定義的iterator類:

樣本1 顯示/etc/目錄下的所有檔案(不顯示子目錄下的檔案):

查看原始碼

列印協助

1 $path = new DirectoryIterator(“/etc/”);
2 foreach ($path as $file){
3 echo $file.’/n’;
4 }

樣本2 顯示/etc/目錄下的嵌套的任意層的子目錄中的所有檔案(顯示出目錄路徑):

查看原始碼

列印協助

1 $path = new RecursiveDirectoryIterator(“/etc/”);
2 foreach ($path as $file){
3 echo $file->getPathname().’/n’;
4 }

樣本3 顯示/etc/目錄下的前10個檔案:

查看原始碼

列印協助

1 $path = new LimitIterator(DirectoryIterator(“/etc/”),0,10);
2 foreach ($path as $file){
3 echo $file.’/n’;
4 }

從這幾個樣本可以看出利用iterator, 代碼清晰, 編程速度快.

三. 簡單原理

1. PHP中將實現了介面Iterator中 的5個方法的類都稱為iterator, 這5個方法是:
current()—返回當前元素值,
key()—返回當前元素的索引值,
next()—下移一個元素,
valid()—判定是否還有後續元素, 如果有, 返回true,
rewind()—移到首元素.

常用的iterator有: DirectoryIterator, SimpleXMLIterator.

2. 遞迴iterator是實現了介面RecursiveIterator中的hasChildren()和getChildren()方法的類,
例如上面樣本2中的RecursiveDirectoryIterator.

3. 樣本3中顯示了iterator 的連結, 也就是將一個iterator(可以稱為源iterator)作為另一個iterator(可以稱為目標iterator)的參數, 通常用於資料過濾.
常用的用於連結的iterator是FilterIterator 和LimitIterator.
FilterIterator是一個抽象類別, 需要實現它的accept()方法作為過濾資料的規則,
而LimitIterator 是類, 用法是new LimitIterator(源iterator, 起始位, 個數) 用於獲得指定個數的元素.

4. PHP中另提供IteratorAggregate介面, 用於將非iterator的類構造為iterator, 實際是實現該介面中的getIterator()方法.

 

 

如:

class sample implements Iterator

{

private $_items = array(1,2,3,4,5,6,7);

 

public function __construct() {

  ;//void

}

public function rewind() { reset($this->_items); }

public function current() { return current($this->_items); }

public function key() { return key($this->_items); }

public function next() { return next($this->_items); }

public function valid() { return ( $this->current() !== false ); }

}

 

$sa = new sample();

foreach($sa as $key => $val){

print $key . "=>" .$val;

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.