Start · Sprachen · PHP · Referenz · IntlIterator

IntlIterator

Klasse

Repräsentiert Iterator-Objekte der <code>intl</code>-Erweiterung und ermöglicht die Iteration über internationaliserungsspezifische Datenstrukturen.

seit PHP 5.5.0 Kategorie: string

Signatur

class IntlIterator implements Iterator

Beschreibung

IntlIterator ist eine interne PHP-Klasse, die das Iterator-Interface implementiert und als Basisklasse für Iterator-Objekte der intl-Erweiterung dient. Sie wird typischerweise nicht direkt instanziiert, sondern von Methoden wie IntlBreakIterator::createCharacterInstance() oder ähnlichen Fabrikmethoden zurückgegeben.

Da die Klasse das standardmäßige PHP-Iterator-Interface implementiert, können Instanzen direkt in foreach-Schleifen verwendet werden. Dies erleichtert das Durchlaufen von internationalisierten Textelementen wie Zeichen, Wörtern oder Sätzen gemäß Unicode-Regeln.

Typische Anwendungsfälle sind die Iteration über Textsegmente mithilfe eines IntlBreakIterator, beispielsweise um einen Text nach Unicode-Regeln in Wörter oder Sätze zu zerlegen. Die Klasse folgt den üblichen Iterator-Konventionen von PHP (current(), key(), next(), rewind(), valid()).

Hinweis: Die Klasse wird in der Regel nicht direkt in Benutzercode verwendet; stattdessen wird ein Iterator-Objekt von einer der Factory-Methoden der intl-Erweiterung zurückgegeben.

Beispiele

Text mit IntlBreakIterator nach Wörtern iterieren

<?php
// Einen wortbasierten BreakIterator für Deutsch erstellen
$breakIterator = IntlBreakIterator::createWordInstance('de_DE');
$breakIterator->setText('Hallo Welt, wie geht es dir?');

// IntlIterator über die Textsegmente holen
$iterator = $breakIterator->getPartsIterator();

foreach ($iterator as $part) {
    // Leerzeichen und Satzzeichen überspringen
    if (trim($part) !== '' && !preg_match('/^\p{P}+$/u', $part)) {
        echo $part . PHP_EOL;
    }
}
Hallo Welt wie geht es dir

Manuelle Verwendung der Iterator-Methoden

<?php
$breakIterator = IntlBreakIterator::createSentenceInstance('de_DE');
$breakIterator->setText('Das ist Satz eins. Das ist Satz zwei. Und ein dritter.');

$iterator = $breakIterator->getPartsIterator();

$iterator->rewind();
while ($iterator->valid()) {
    echo 'Satz: ' . trim($iterator->current()) . PHP_EOL;
    $iterator->next();
}
Satz: Das ist Satz eins. Satz: Das ist Satz zwei. Satz: Und ein dritter.

// Wichtig · Fallstricke

Direkte Instanziierung: IntlIterator kann nicht sinnvoll direkt instanziiert werden. Objekte dieser Klasse werden stets von internen intl-Methoden zurückgegeben, z. B. IntlBreakIterator::getPartsIterator().

Erweiterung: Die intl-Erweiterung muss in PHP aktiviert sein (üblicherweise über --enable-intl oder das Paket php-intl). Fehlt die Erweiterung, steht diese Klasse nicht zur Verfügung.

Unicode-Korrektheit: Im Gegensatz zu einfachen String-Funktionen berücksichtigt IntlIterator in Kombination mit einem passenden IntlBreakIterator die Unicode-Segmentierungsregeln, was für mehrsprachige Anwendungen essenziell ist.