Equal i identical nije isto
Loše je postavljen uslov:
if (next($data)) {
taj uslov će vratiti "false" kada je stvarno poslednji slog u pitanju, ali i u još nekim slučajevima.
Fora je u tome što ti ovde radiš "nevidljivo" kastovanje u boolean, tj. php će vrednosti 0 i empty kastovati u false, a pretpostavljam da je to situacija gde ti pravi problem.
Da probam da pojasnim, tvoj uslov je identican ovom
if ((bool)next($data) == true)
a hteo si ovako nešto:
if (next($data) !== false)
Znači ovaj uslov je ispunjen ako je vrednost koju vrati next($data) različit od false, ali i ako je različitog tipa, npr. 0
|