строка с разделителями табуляции в 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?

Спасибо


person Matt    schedule 14.09.2011    source источник
comment
Что такое var_dump($line) и var_dump($tsvData)?   -  person Michael Berkowski    schedule 15.09.2011
comment
var_dump для $tsvData верен, но $line дает мне один массив целых чисел. drcknlsn объяснил это ниже. Спасибо за вашу помощь.   -  person Matt    schedule 15.09.2011


Ответы (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
person FtDRbwLXw6    schedule 14.09.2011
comment
О да. Я думал, что это работает как SplFileObject, но для данных, уже хранящихся на странице. Спасибо за вашу помощь! Это прекрасно работает. - person Matt; 15.09.2011