ugrás a tartalomhoz

Iterátor + RecursiveIterator inicializáslása

kempelen · 2006. Már. 18. (Szo), 17.58
Sziasztok!

Csináltam egy classt ami megvalósítja az Iteratort ÉS A RecursiveIteratort.

A rekurzívnál ésszerű, hogy az iterálni kívánt rész szülő elemét adjuk meg az indításhoz, vegyünk például egy könyvtár struktúrát (Nem könyvtárakon dolgozok!):

a/alma
a/alma/starking
a/alma/golden
a/korte
a/szilva


Ha $cucc = new ProjectIterator("a") kóddal indítok, akkor logikusan az alma, korte, szilva elemekre vagyok kíváncsi. Illetve a kérdésem pont az, hogy miért?? Az ITERATOR maga, az teljesen lineáris adatokon is iterálhat, nem? Akkor viszont nincs egy "a" ami parent lehetne.

$list = array('alma','korte','szilva');

foreach($list as $elem)

Itt az iterátornak nem volt egy PARENT, tehát ha a ProjectIteratorom lenne ilyen "egy dimenzios", akkor az "a"-val inicializálás lehetetlen.

Viszont, ha a RecursiveIteratort is megvalósítja az osztály, akkor meg az értelmetlen, hogy mondjuk "alma"-val inicializáljam, ha az "alma" "korte" "szilva" sorozaton akarok iterálni.

Először megírtam úgy, hogy "a"-val inicializál, de aztán mikor láttam, hogy néha sima array('alma','korte','szilva') szerű "lista" is lehet benne az adat, akkor átírtam, hogy a lista ELSŐ ELEMÉVEL kell inicializálni, tehát

$cucc = new ProjectIterator("a") csak az a-t adja vissza, vagy ha lenne b/ akkor az is.

$cucc = new ProjectIterator("alma") adja vissza a 3 gyümölcsöt, ha nem rekurzívan hívod.

De így meg az a gond, hogy honnan tudná valaki, hogy mi az első elem az adott szinten ahol listázni akarsz. Az "a" mint parent az 100%, de az "alma" mint első elem, kevsébé...

Nem tudom érteni fogja e valaki a kérdést, mert pont az a baj, hogy már én sem értem.

Parenttel vagy első elemmel való inicializálásra kell megírni az iteratorokat? (Iterator ÉS RecursiveIterator esetén)

Melyik a várt működés:

$cucc = new ProjectIterator("alma");
foreach($cucc as $gyumi)
{
  echo $gyumi;
}
Kimenet: almakorteszilva

VAGY

$cucc = new ProjectIterator("a");
foreach($cucc as $gyumi)
{
  echo $gyumi;
}
Kimenet: almakorteszilva


Ha a második, akkor hogy oldod meg ha sosincs egy parent, amin belül iterálsz? Jaaa, akkor lehet, hogy csak "new ProjectIterator()" és az menne a lineáris tömbön??

*g*

1000 Köszi,
Lion/KMP

ui: mindenesetre addig visszaírom parentesre...