Signatur
Beschreibung
IntlPartsIterator wird intern von der Methode IntlBreakIterator::getPartsIterator() erzeugt und ermöglicht die sequenzielle Iteration über die einzelnen Textabschnitte (Parts), die zwischen den vom IntlBreakIterator erkannten Grenzen liegen. So kann man zum Beispiel alle Wörter, Sätze oder Zeilen eines Textes der Reihe nach durchlaufen.
Die Klasse implementiert das PHP-Iterator-Interface und kann daher direkt in einer foreach-Schleife verwendet werden. Jeder Schritt liefert den Textabschnitt zwischen zwei aufeinanderfolgenden Break-Positionen als String-Wert.
Der Schlüssel jedes Elements kann je nach übergabenem Flag entweder die laufende Nummer des Abschnitts (Standard) oder die tatsächliche Anfangsposition (Byte-Offset) im ursprünglichen Text sein. Das Flag wird beim Erstellen des Iterators über getPartsIterator() übergeben.
Typische Anwendungsfälle sind die Unicode-konforme Tokenisierung von Texten in Wörter oder Sätze, die Silbentrennung sowie die Zeilenumbruchanalyse – besonders wichtig für mehrsprachige Anwendungen, bei denen einfache Leerzeichen-basierte Splits versagen.
Beispiele
Wörter eines deutschen Textes Unicode-konform iterieren
<?php
$text = 'Hallo Welt! Wie geht es dir?';
$bi = IntlBreakIterator::createWordInstance('de_DE');
$bi->setText($text);
$it = $bi->getPartsIterator();
foreach ($it as $key => $part) {
// Nur echte Wörter ausgeben (keine Leerzeichen/Interpunktion)
if (trim($part) !== '' && ctype_alpha(trim($part))) {
echo "[$key] '$part'\n";
}
}
Sätze eines Textes mit Byte-Offset als Schlüssel ausgeben
<?php
$text = 'Das ist ein Satz. Und das ist ein weiterer. Noch einer!';
$bi = IntlBreakIterator::createSentenceInstance('de_DE');
$bi->setText($text);
// KEY_SEQUENTIAL = 0, KEY_LEFT = 1 (Anfangsposition)
$it = $bi->getPartsIterator(IntlPartsIterator::KEY_LEFT);
foreach ($it as $offset => $sentence) {
echo "Offset $offset: '" . trim($sentence) . "'\n";
}
// Wichtig · Fallstricke
Wichtig: IntlPartsIterator-Objekte sollten nicht direkt instanziiert werden – sie werden ausschließlich über IntlBreakIterator::getPartsIterator() erzeugt. Eine direkte Instantiierung ist nicht vorgesehen und wird nicht unterstützt.
Die Klasse definiert zwei Klassenkonstanten für den $key_type-Parameter von getPartsIterator(): IntlPartsIterator::KEY_SEQUENTIAL (Wert 0, Standard, aufsteigende Ganzzahl-Schlüssel) und IntlPartsIterator::KEY_LEFT (Wert 1, Byte-Offset des linken Randes des Abschnitts im Originaltext).
Da die Klasse die ICU-Bibliothek verwendet, sind die Ergebnisse sprachabhängig und können sich mit unterschiedlichen ICU-Versionen leicht unterscheiden. Für produktive Anwendungen sollte die ICU-Version mit INTL_ICU_VERSION geprüft werden.