Цикл печати по каждому элементу дублирует последнюю запись с выводом в файл данных

У меня есть цикл foreach, который перебирает, чтобы представить HTML и сохранить данные в файл данных. Проблема (которая поднималась ранее) заключается в том, что последняя аллитерация цикла foreach дублируется. Использование unset не работает, так как записывает файл данных из цикла foreach! Как я могу исправить эту проблему? Я хочу вырезать дубликат и сохранить запись в файл данных...

Мой код:

// Save data to a DAT file
$datafile = "datfile.dat";
$fh = fopen($datafile, 'w') or die("can't open file");

foreach($xml->DROP as $shipment) {
    $CONNOTE_ID = $shipment->HEADER->BILL_OF_LADING; // 20 CHARS
    $output = sprintf("%-20.20s", $CONNOTE_ID);
    echo $output;
    unset($shipment);
    fwrite($fh, $output);
}

$output .= "%%EOF";
fwrite($fh, $output);
echo "%%EOF";
fclose($fh);

XML:

<?xml version="1.0" encoding="UTF-8"?>
<ISHPMNT1>
<DROP>
<HEADER>
  <BILL_OF_LADING>VW038687030000006</BILL_OF_LADING>
</HEADER>
</DROP>
</ISHPMNT1>

1 ответ

Решение

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

Исправлено раздел кодирования:

echo $output;
fwrite($fh, $output);
}
fwrite($fh, "%%EOF");

спасибо всем, кто пытался помочь! Очень признателен

Другие вопросы по тегам