dcsimg
Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


advertisement
 

Using Iterators in PHP : Page 2

Discover how to use the iterators in the Standard PHP Library


advertisement

WEBINAR:

On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning


Listing Classes and Methods with Reflection

As an interesting exercise, you can view a full list of iterator classes and their methods by using the Reflection API, produced by the following short application. Listing 1 shows the output:

<?php //Using the Reflection API to see a full list of methods of the //DirectoryIterator class Reflection::export(new ReflectionClass('DirectoryIterator')); ?>

The FilterIterator Class



You use this class to filter out unwanted values using the accept() method. The FilterIterator class is not meant to be used directly; instead, you need to extend it to implement custom iterator filters. In particular, you must implement the accept() method.

The following application iterates over the $flowers array, filtering it with the accept() method to list only numeric array key values:

<?php $flowers = array('tulip', 'a'=>'rose', 'lily', 'b'=>'snowdrop', 'crocus'); class FlowerClass extends FilterIterator{ public function __construct( Iterator $iterator ){ parent::__construct( $iterator ); } //This function checks if the array keys are numeric function accept(){ return is_numeric($this->key()); } } //Create a new ArrayIterator instance and pass it to the FlowerClass //constructor to create a new FlowerClass object $value = new FlowerClass(new ArrayIterator($flowers)); echo 'List all the elements from the $flowers array that have numeric keys: '.'<br />'; //Iterate over the values in the ArrayIterator foreach($value as $key=>$value){ echo $key.' =>'.$value.'<br />'; } ?>

The output is:

List all the elements from the $flowers array that have numeric keys: 0 =>tulip 1 =>lily 2 =>crocus

Here's an alternate version that iterates the $flowers array, listing only the odd array key values:

<?php $flowers = array('tulip', 'rose', 'lily', 'snowdrop', 'crocus'); class MyClass extends FilterIterator{ public function __construct( Iterator $iterator ){ parent::__construct( $iterator ); } //This function checks if the array keys are odd numbers function accept(){ if(($this->key() % 2) != 0){ return $this->key(); } } } //Create a new ArrayIterator instance and //pass it to the MyClass constructor $value = new MyClass(new ArrayIterator($flowers)); echo 'List all the $flowers elements with odd numbered keys: '.'<br />'; //Iterate over the $flowers array foreach($value as $key=>$value){ echo $key.' == '.$value.'<br />'; } ?>

The output is:

'List all the $flowers elements with odd numbered keys: 1 == rose 3 == snowdrop

The DirectoryIterator Class

The DirectoryIterator class provides a simple interface for viewing the contents of filesystem directories. The following example lists the name and size of files in a specific directory:

<?php //Create a new DirectoryIterator instance $path = new DirectoryIterator('../Iterator'); //Iterate over the files in the directory, listing the name and ize of the encountered filessda foreach ($path as $file) { // Return file name of current DirectoryIterator item echo $file->getFilename() . "<br />"; // Get size of current DirectoryIterator item echo $file->getSize() . "<br />"; } ?>

Here's the output:

The filename = iterator_1.php The file size = 861 The filename = iterator_11.php The file size = 484 The filename = iterator_2.php The file size = 648 The filename = iterator_3.php The file size = 403



Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date