2017-02-21 38 views
0

У меня есть файл CSV, и я хочу проверить, содержит ли строка специальный заголовок. Только если моя строка содержит специальный заголовок, она должна быть преобразована в XML, добавлен другой материал и так далее.Итерации через CSV-файл и получить каждое значение для указанного заголовка?

Вопрос теперь в том, как я могу перебирать весь CSV-файл и получать для каждого заголовка значение в этом поле?

Потому что, если он соответствует моему специальному заголовку, я просто хочу преобразовать указанную строку, где заголовок соответствует моему названию. Может быть, и идея, как я могу это сделать?

Пример: CSV File

Я должен добавить эту функцию в моей фактической функции. Поскольку моя фактическая функция - это просто преобразование всего CSV в XML. Но я просто хочу преобразовать указанные строки.

Моя фактическая функция:

function csvToXML($inputFilename, $outputFilename, $delimiter = ',') 
{ 
    // Open csv to read 
    $inputFile = fopen($inputFilename, 'rt'); 

    // Get the headers of the file 
    $headers = fgetcsv($inputFile, 0, $delimiter); 

    // Create a new dom document with pretty formatting 
    $doc = new DOMDocument('1.0', 'utf-8'); 
    $doc->preserveWhiteSpace = false; 
    $doc->formatOutput = true; 

    // Add a root node to the document 
    $root = $doc->createElement('products'); 
    $root = $doc->appendChild($root); 

    // Loop through each row creating a <row> node with the correct data 
    while (($row = fgetcsv($inputFile, 0, $delimiter)) !== false) { 
    $container = $doc->createElement('product'); 
    foreach ($headers as $i => $header) { 
     $child = $doc->createElement($header); 
     $child = $container->appendChild($child); 
     $value = $doc->createTextNode($row[$i]); 
     $value = $child->appendChild($value); 
    } 

    $root->appendChild($container); 
    } 

    $strxml = $doc->saveXML(); 
    $handle = fopen($outputFilename, 'w'); 
    fwrite($handle, $strxml); 
    fclose($handle); 
} 

Привет и спасибо!

ответ

1

Просто проверьте заголовок перед добавлением строк в XML. Вы можете сделать это, добавив следующие строки:

while (($row = fgetcsv($inputFile, 0, $delimiter)) !== false) { 

    $specialTitles = Array('Title 1', 'Title 2', 'Title 3'); // titles you want to keep 

    if(in_array($row[1], $specialTitles)){ 
     $container = $doc->createElement('product'); 
     foreach ($headers as $i => $header) { 
      $child = $doc->createElement($header); 
      $child = $container->appendChild($child); 
      $value = $doc->createTextNode($row[$i]); 
      $value = $child->appendChild($value); 
     } 

     $root->appendChild($container); 
    } 
    } 
+0

Но почему '$ row [1]'? – Jan

+0

'fgetcsv' возвращает массив полей из строки CSV. Поскольку ваш 'Title' находится во втором столбце, он должен быть @ index 1. – BizzyBob

+0

Я получил его: D - Но я понятия не имею, почему моя IDE не принимает мой код ... Без, если это принято ??? Картинка .. https://drive.google.com/open?id=0BzLxINxZFzova2dDYm50YkplWTg – Jan