Строка с разделителями табуляции в XML с PHP

Я пытаюсь записать содержимое переменной с разделителями табуляции в XML следующим образом:

$tsvData = str_getcsv($input, "\t");
foreach($tsvData as $line => $row) {
    if($line > 0) {
        $xmlWriter->writeElement('NAME', $row[0]);
        $xmlWriter->writeElement('CAKE', $row[1]);
        $xmlWriter->writeElement('BODYPART', $row[2]);
    }
}

Но он записывает только один символ для каждого тега XML вместо всего, что находится между каждой вкладкой. Когда я использую SplFileObject, получая те же данные TSV, но из файла, это работает. Что я делаю не так с функцией str_getcsv?

Спасибо

1 ответ

Решение

str_getcsv() Функция возвращает одномерный массив, но вы рассматриваете его так, как будто он возвращает двумерный массив.

Редактировать:

Чтобы уточнить, str_getcsv() не имеет понятия "линии". Вместо этого:

$tsvData = str_getcsv($input, "\t");

Думая, что вы получите массив строк, каждая из которых содержит массив столбцов, вы должны сделать что-то вроде этого:

$lines = explode("\n", $input);
$tsvData = array();
foreach ($lines as $line) {
    $tsvData[] = str_getcsv($line, "\t");
}
// now $tsvData is a 2-dimensional array of lines/columns like you were wanting
Другие вопросы по тегам