При парсинге документа .docx, используя библиотеку phpWord написал код, который выводит на экран текст документа,
и проблема в том, что phpWord при парсинге выводит два типа обьектов: Text object и Textrun object.
Text object - обычный базовый текст, к которому мы можем применить
echo
Textrun object - это группа текстов, т.е. может включать в себя сколь угодно Text обьектов и Textrun обьекты тоже.
foreach ($cell->getElements() as $lvl1) {
if ($lvl1 instanceof PhpOffice\PhpWord\Element\Text) {
echo $lvl1->getText();
} elseif ($lvl1 instanceof PhpOffice\PhpWord\Element\TextRun) {
foreach ($lvl1->getElements() as $lvl2) {
if ($lvl2 instanceof PhpOffice\PhpWord\Element\Text) {
echo $lvl2->getText();
} elseif ($lvl2 instanceof PhpOffice\PhpWord\Element\TextRun) {
foreach ($lvl2->getElements() as $lvl3) {
... // и т.д.
}
}
}
}
и этот код работает, перебирает 3 уровня вложенности и выводит текст, но как оказалось, кол-во уровней вложенности заранее неизвестно. Предположим phpWord при парсинге выведет 100 уровней вложенности. Это надо чтоли 100 foreach писать, чтобы достучаться до текста? Чую есть более грамотный подход к этому.