Правильная запись в csv при разборе с xml

113
22 февраля 2018, 15:09

Нужна помощь, делаю простой разбор xml в прайс в CSV для синхронизации магазина, точнее учусь и хочу сделать. Задача скрипта взять xml, скачать и сделать с него CSV в заданном формате. Прошу не обращать внимание на правильность этого всего дела (в плане написания). Собственно проблема с выводом строки с размерами (опциями), их нужно преобразовать в определенный формат для загрузки, что я и сделал. Но при записи через fputcsv() в файл, им добавляется разделитель (запятая или точка с запятой, что поставлю), но здесь разделитель не нужен, они должны быть строкой с переносом а не массивом. Соответственно потом csv понимает это как отдельные колонки

По факту нужно чтобы они записывались без разделителей в одну колонку. Код моей обработки:

<?php 
$filepo= file_get_contents('http://free-run.kiev.ua/yml/12345');
file_put_contents('down.xml', $filepo);
$filexml= 'down.xml';
if (file_exists($filexml))  {
   $xml = simplexml_load_file($filexml);
   $i = 1;           // Position counter
   $values = [];     // PHP array
   // Writing column headers
   $columns = array('url', '_CUSTOM_BASE_PRICE_', '_CUSTOM_BASE_CURRENCY_CODE_', 'categoryId', 'picture', 'delivery', 'name', 'description', '_OPTION_','_OPTION2_');
   $fs = fopen('synchro.csv', 'w');
   fputcsv($fs, $columns, ';');      
   fclose($fs);
   // Iterate through each <item> node
   $node = $xml->xpath('//offer');
   foreach ($node as $n) {           
       // Iterate through each child of <item> node
       $child = $xml->xpath('//offer['.$i.']/*');   
       foreach ($child as $value) {
          $values[] = $value;
       }
       $pere = "\n";
       $razmery = $n->param;
       $pieces = explode(',', $razmery);
       foreach ($pieces as $value2) {
          $values[] =  'radio|Размер|' .$value2. '|1|100|0|+|0.0000|+|0|+|0.00' .$pere; 
       }

       // Write to CSV files (appending to column headers)
       $fs = fopen('synchro.csv', 'a');
       fputcsv($fs, $values, ';');         
       fclose($fs);  
       $values = [];    // Clean out array for next <item> (i.e., row)
       $values2 = [];    // Clean out array for next <item> (i.e., row)
       $i++;            // Move to next <item> (i.e., node position)
   }
}
READ ALSO
Конвертация из PHP в C++

Конвертация из PHP в C++

Есть Фрагмент кода на PHP:

198
Творится что-то непонятное Visual Studio 15

Творится что-то непонятное Visual Studio 15

Код выдает неправильные значения, хотя должен работать нормальноНачал отладку, и тут выясняется, что вижуалка скачет по функции как ей хочется,...

152
В чём разница между этими объявлениями указателя?

В чём разница между этими объявлениями указателя?

Можете, пожалуйста, сказать, чем отличаются эти строки ptr1 и ptr2? Работают они, вроде бы, одинаково

155
Разница между указателем и ссылкой

Разница между указателем и ссылкой

Я не понимаю, почему выводит разные значения, разве ссылка не должна неявно преобразовываться в указатель на mas?

125