RecursiveIteratorIterator mit for Schleife realisieren.

NTDY

Erfahrenes Mitglied
Ich nehme mal als Basis den Beitrag auf dieser URL: http://www.phpbuddy.eu/mehrdimensionales-array-hierarchisch-ausgeben.html.

Ich möchte ein Array mit RecursiveIteratorIterator durchlaufen, möchte aber den Fall unterscheiden, dass wenn bspw. der Arraykey "tv" aufgerufen wird, ich die ersten 2 Elemente darin überspringe. (warum auch immer ;-))
Nun hatte ich zuerst gedacht, dass ich mit foreach über die Elemente iteriere, aber dann muss ich die 2 Elemente, die ich überspringe mir merken und dann 2x next() anwenden:
Code:
$a = new \RecursiveArrayIterator($data);
$iterator = new \RecursiveIteratorIterator($a, TRUE );
$iterator->rewind();
foreach ($iterator as $key => $val){
 if($key=='tv'){
   //in Schleife solange durchgehen, bis die ersten 2 Elemente durchgelaufen sind. Merke mir den Wert 2 und 
  // durchlaufen hierin eine for Schleife in der 4 mal $iterator->next() angewandt wird
 } 
}
Hat jemand eine Idee wie ich das eleganter anstelle? Ich hatte auch schon überlegt, dass ich mit einer for-Schleife durchwandere, aber ich weiß nicht wie ich den Zähler $i hier anwende:
Code:
for($i=0;$i<=iterator_count($iterator);$i++){
}
Und hier ist das Array zur Verdeutlichung:
Code:
produkte
    elektronik
        tv
            LG Electronics
            Samsung
            Toshiba
            Sony
        video
            DVD
                Sony
                Panasonic
                Philips
            Blu-ray
                Samsung
                Panasonic
                Philips
                Toshiba
    baumarkt
        renovieren
            Tapeten
            Farben
            Bodenbeläge
        baustoffe
            Beton
            Dämmstoffe
        arbeitskleidung
            Gehörschutz
            Sicherheitsschuhe
            Schutzbrille
service
    Beratung
    Bestellung und Versand
    Telefon Hotline
    FAQ
 
PHP 5.5 läuft bereits.
Kannst Du mir kurz einen Hint geben wie ich yield dann einsetzen werde? Ich stelle mir das so vor:

Code:
$a = new \RecursiveArrayIterator($data);
$iterator = new \RecursiveIteratorIterator($a, TRUE );
$iterator->rewind();
foreach ($iterator as $key => $val){
 if($key=='tv'){
   yield $val;
 } 
}

Wie "breche" ich dann in den weiteren Verlauf dann ein?
 
Hallo,

vielleicht hilft dir das weiter:
PHP:
$a = new RecursiveArrayIterator($data);
$iterator = new RecursiveIteratorIterator($a, 1);

foreach ($iterator as $key => $val) {
	if(is_array($val)) $parent_key = $key;
	else
	{
		$comb_key = $parent_key.$key;
		echo $comb_key, ' : ', $val, '<br>';
	}
}

Ausgabe:
Code:
tv0 : LG Electronics
tv1 : Samsung
tv2 : Toshiba
tv3 : Sony
DVD0 : Sony
DVD1 : Panasonic
DVD2 : Philips
Blu-ray0 : Samsung
Blu-ray1 : Panasonic
Blu-ray2 : Philips
Blu-ray3 : Toshiba
renovieren0 : Tapeten
renovieren1 : Farben
renovieren2 : Bodenbeläge
baustoffe0 : Beton
baustoffe1 : Dämmstoffe
arbeitskleidung0 : Gehörschutz
arbeitskleidung1 : Sicherheitsschuhe
arbeitskleidung2 : Schutzbrille
service0 : Beratung
service1 : Bestellung und Versand
service2 : Telefon Hotline
service3 : FAQ
 
Vielen Dank für eure Beiträge.
@saftmeister:
Ich habe mir nun zig Quellen zu yield durchgelesen, aber wie Du Generatoren in dem oben genannten Beispiel verwenden würdest ist mir bisher nicht klar. Kannst Du das bitte noch ein wenig erläutern?
 
Mein Vorschlag war wohl ein nicht ganz durchdachter Schnellschuss. Kannst ihn ignorieren. Macht nur Sinnd bei Zugriff auf Resourcen wie Dateien.
 
Zurück