迭代器
在线手册:中文  英文

The ArrayIterator class

(PHP 5)

简介

This iterator allows to unset and modify values and keys while iterating over Arrays and Objects.

When you want to iterate over the same array multiple times you need to instantiate ArrayObject and let it create ArrayIterator instances that refer to it either by using foreach or by calling its getIterator() method manually.

类摘要

ArrayIterator implements ArrayAccess , SeekableIterator , Countable , Serializable {
/* 方法 */
public void append ( mixed $value )
public void asort ( void )
public __construct ([ mixed $array = array() [, int $flags = 0 ]] )
public int count ( void )
public mixed current ( void )
public array getArrayCopy ( void )
public void getFlags ( void )
public mixed key ( void )
public void ksort ( void )
public void natcasesort ( void )
public void natsort ( void )
public void next ( void )
public void offsetExists ( string $index )
public mixed offsetGet ( string $index )
public void offsetSet ( string $index , string $newval )
public void offsetUnset ( string $index )
public void rewind ( void )
public void seek ( int $position )
public string serialize ( void )
public void setFlags ( string $flags )
public void uasort ( string $cmp_function )
public void uksort ( string $cmp_function )
public string unserialize ( string $serialized )
public bool valid ( void )
}

Table of Contents


迭代器
在线手册:中文  英文

用户评论:

Relakuyae (2011-10-19 17:23:33)

Need a callback on an iterated value, but don't have PHP 5.4+?  This makes is stupid easy:

<?php
class ArrayCallbackIterator extends ArrayIterator {
  private 
$callback;
  public function 
__construct($value$callback) {
    
parent::__construct($value);
    
$this->callback $callback;
  }

  public function 
current() {
    
$value parent::current();
    return 
call_user_func($this->callback$value);
  }
}
?>

You can use it pretty much exactly as the Array Iterator:

<?php
$iterator1 
= new ArrayCallbackIterator($valueList"callback_function");
$iterator2 = new ArrayCallbackIterator($valueList, array($object"callback_class_method"));
?>

foobuilder at gmail dot com (2010-12-09 11:01:25)

Unsetting all keys of an ArrayItem within foreach will always leave the second key: 

<?php
$items 
= new ArrayObject(range(09)); 

while (list(
$k$v) = each($items)) {
    unset(
$items[$k]); 
}

print_r($items); 

//  ArrayIterator Object
//  (
//      [storage:ArrayIterator:private] => Array
//          (
//              [1] => 1
//          )
//  )
?>

I'm not sure if this is a bug as unsetting keys within foreach is usually a bad idea to begin with (use while instead), but it's something to be aware of.

Sean Burlington (2009-05-26 05:15:47)

and to iterate recursively use the (sparsely documented)  RecursiveArrayIterator

<?php

$fruits 
= array(
                
"apple" => "yummy",
                
"orange" => "ah ya, nice",
                
"grape" => "wow, I love it!",
                 
"plum" => "nah, not me"
                
);

$veg = array("potato" => "chips""carrot" => "soup");
$grocery = array($fruits$veg);
$obj = new ArrayObject$grocery );

$it = new RecursiveIteratorIterator( new RecursiveArrayIterator($grocery));

foreach (
$it as $key=>$val)
echo 
$key.":".$val."\n";

?>

Output
--------
apple:yummy
orange:ah ya, nice
grape:wow, I love it!
plum:nah, not me
potato:chips
carrot:soup

Venelin Vulkov (2008-11-11 03:44:02)

Another fine Iterator from php . You can use it especially when you have to iterate over objects

<?php
$fruits 
= array(
    
"apple" => "yummy",
    
"orange" => "ah ya, nice",
    
"grape" => "wow, I love it!",
    
"plum" => "nah, not me"
);
$obj = new ArrayObject$fruits );
$it $obj->getIterator();

// How many items are we iterating over?

echo "Iterating over: " $obj->count() . " values\n";

// Iterate over the values in the ArrayObject:
while( $it->valid() )
{
    echo 
$it->key() . "=" $it->current() . "\n";
    
$it->next();
}

// The good thing here is that it can be iterated with foreach loop

foreach ($it as $key=>$val)
echo 
$key.":".$val."\n";

/* Outputs something like */

Iterating over4 values
apple
=yummy
orange
=ah yanice
grape
=wowI love it!
plum=nahnot me

?>

Regards.

易百教程