Met "foreach" door een object/array lopen.... Iterator class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roger Keulen

Roger Keulen

15/01/2011 16:52:37
Quote Anchor link
Een leuke class die het gemakkelijk maakt om door een array heen te lopen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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!"
 
PHP hulp

PHP hulp

15/11/2024 10:45:34
 
Pim -

Pim -

15/01/2011 18:58:17
Quote Anchor link
ArrayObject doet dit beter ;)
 
Roger Keulen

Roger Keulen

15/01/2011 22:00:32
Quote Anchor link
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...
Gewijzigd op 15/01/2011 22:09:19 door Roger Keulen
 
Pim -

Pim -

15/01/2011 22:35:05
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.