<?php
// IteratorAggregate
// Create indexed and associative arrays.
class myData implements IteratorAggregate {
private $array = [];
const TYPE_INDEXED = 1;
const TYPE_ASSOCIATIVE = 2;
public function __construct( array $data, $type = self::TYPE_INDEXED ) {
reset($data);
while( list($k, $v) = each($data) ) {
$type == self::TYPE_INDEXED ?
$this->array[] = $v :
$this->array[$k] = $v;
}
}
public function getIterator() {
return new ArrayIterator($this->array);
}
}
$obj = new myData(['one'=>'php','javascript','three'=>'c#','java',], /*TYPE 1 or 2*/ );
foreach($obj as $key => $value) {
var_dump($key, $value);
echo PHP_EOL;
}
// if TYPE == 1
#int(0)
#string(3) "php"
#int(1)
#string(10) "javascript"
#int(2)
#string(2) "c#"
#int(3)
#string(4) "java"
// if TYPE == 2
#string(3) "one"
#string(3) "php"
#int(0)
#string(10) "javascript"
#string(5) "three"
#string(2) "c#"
#int(1)
#string(4) "java"
?>
Good luck!
L'interface IteratorAggregate
(PHP 5 >= 5.0.0)
Introduction
Interface pour créer un itérateur externe.
Sommaire de l'Interface
IteratorAggregate
extends
Traversable
{
/* Méthodes */
}Exemple #1 Exemple simple
<?php
class myData implements IteratorAggregate {
public $property1 = "Propriété publique numéro un";
public $property2 = "Propriété publique numéro deux";
public $property3 = "Propriété publique numéro trois";
public function __construct() {
$this->property4 = "dernière propriété";
}
public function getIterator() {
return new ArrayIterator($this);
}
}
$obj = new myData;
foreach($obj as $key => $value) {
var_dump($key, $value);
echo "\n";
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
string(9) "property1" string(19) "Propriété publique numéro un" string(9) "property2" string(19) "Propriété publique numéro deux" string(9) "property3" string(21) "Propriété publique numéro trois" string(9) "property4" string(13) "dernière propriété"
Sommaire
- IteratorAggregate::getIterator — Retourne un itérateur externe
Lubaev.K ¶
3 days ago
Tab Atkins ¶
1 year ago
Note that, at least as of 5.3, you still aren't allowed to return a normal Array from getIterator().
In some places, the docs wrap the array into an ArrayObject and return that. DON'T DO IT. ArrayObject drops any empty-string keys on the floor when you iterate over it (again, at least as of 5.3).
Use ArrayIterator instead. I wouldn't be surprised if it didn't have its own set of wonderful bugs, but at the very least it works correctly when you use it with this method.
