Een leuke class die het gemakkelijk maakt om door een array heen te lopen.

<?php

// Iterator class voor het lopen door array's in een object...

class clsIterator implements Iterator {
protected $IteratorArray = array(); // --- Iterator Reference ---
public function rewind() { reset($this->IteratorArray); }
public function current() { return current($this->IteratorArray); }
public function key() { return key($this->IteratorArray); }
public function next() { return next($this->IteratorArray); }
public function valid() { $Key = key($this->IteratorArray); return ($Key !== NULL && $Key !== FALSE); }
public function __construct() { $this->SetIteratorArray( $this->IteratorArray); }
public function SetIteratorArray(array &$IteratorArray) { $this->IteratorArray = &$IteratorArray; }
}



// Voorbeeld gebruik:
class clsMyIterator extends clsIterator {
private $prvArray = array("Test" => "Geslaagd");
public function __construct() { $this->SetIteratorArray($this->prvArray); }
}


$Iterator = New clsMyIterator();
foreach($Iterator as $Key => $Value)
{ echo $Key.'='.$Value.'<BR>'; }


?>


Je kunt hem ook nog uitbreiden met dynamisch benaderen van het array:

public function __get($ID) {
if (array_key_exists($ID, $this->IteratorArray)) {
return $this->IteratorArray[$ID];
} else { return false; }
}

public function __set($ID, $Value) {
$this->IteratorArray[$ID] = $Value;
}


Dus dan kun je dit doen: $Iterator->MaaktAllemaalNietMeerUit = "Geweldig!"
ArrayObject fill 0.01441502571106
ArrayObject read_key 0.018320083618164
ArrayObject read_foreach 2.1559031009674

array() fill 0.012364864349365
array() read_key 0.013092041015625
array() read_foreach 0.011217832565308

Maar wel 200x sneller... :-)


Maar bedankt voor je reactie je hebt me nog op een leuk idee gebracht...
Ik zie het bij het commentaar staan ja.
Ik denk alleen niet dat dit nog geldt bij de huidige PHP versie. Sinds het begin van PHP 5 is het gebruik van objecten veel sneller geworden.

En trouwens, dit vergelijkt ArrayObject met een native array, niet met jouw klasse.

Reageren