Задать вопрос
@Aleksander911

Как записать многомерный массив в csv?

Здравствуйте, всем!
Есть json файл такого структуры:
{
  "Result": {
    "15608": {
      "NAME": "Climate 5000 RAC 2,6-3 IBW",
      "XML_ID": "7849a166-66ef-11eb-804b-00155db05a13",
      "PARAMS": {
        "BRAND": "Bosch",
        "ATTR_L_SERIA": "Climate 5000",
        "ATTR_L_IN_UNIT_TYPE": "Настенный",
        "ATTR_L_GOODGROUP": "Бытовые сплит-системы",
        "ATTR_L_GOODTYPE": "Внутренний блок",
        "ATTR_L_COLOR": "Белый",
        "ATTR_RUS_NAME_AX": "Внутренний блок кондиционера"
      },
      "PRICES": {
        "BASE": {
          "XML_ID": "BASE",
          "NAME": "Розничная цена",
          "PRICE": "10452.70",
          "CURRENCY": "RUR"
        },
        "mprc_2": {
          "XML_ID": "mprc_2",
          "NAME": "МПРЦ Зона 2",
          "PRICE": "12780.00",
          "CURRENCY": "RUR"
        }
      },
      "STORE": {
        "NAME": "Даичи Толстого",
        "XML_ID": "aa5a53b8-9f2e-11ea-bffe-00155df9f517",
        "STORE_AMOUNT": 0,
        "DELIVERY_AMOUNT": 0,
        "STORE_PARAMS_INFO": {
          "LIMIT": 50,
          "HIDE_MORE_LIMIT": false
        },
        "DELIVERY_PARAMS_INFO": {
          "LIMIT": 50,
          "HIDE_MORE_LIMIT": false
        }
      }
    },
.....

В Битрикс при помощи Json::decode($httpClient->getResult) создал многомерный массив. В php попробовал сделать запись в csv файл:
$buffer = fopen(__DIR__ . '/file.csv', 'w'); 
fputs($buffer, chr(0xEF) . chr(0xBB) . chr(0xBF));

foreach($ar as $val) { 
	foreach($val as $val2) { 
		fputcsv($buffer, $val2, ';'); 
	 
	} 
	
} 
fclose($buffer); 
exit();

Но данные записываются только первого уровня, дальше идут ячейки с array.
64873e8b7b6eb220824626.png
Подскажите как можно записать нормально многомерный массив в csv?
  • Вопрос задан
  • 260 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
CSV - для двумерных таблиц же.
Или сделать массив более плоским, или писать не в CSV.
Ответ написан
Решение очевидно: пересоберите данные в двухмерный массив. Сначала определитесь, какими должны быть столбцы. На мой взгляд, вот это:
{"PRICES": {
        "BASE": {
          "XML_ID": "BASE",
          "NAME": "Розничная цена",
          "PRICE": "10452.70",
          "CURRENCY": "RUR"
        },
        "mprc_2": {
          "XML_ID": "mprc_2",
          "NAME": "МПРЦ Зона 2",
          "PRICE": "12780.00",
          "CURRENCY": "RUR"
        }
      }}
напрашивается на то, чтобы быть двумя столбцами: заголовки (т.е. первая строка CSV) "Розничная цена" и "МПРЦ Зона 2", значения (вторая и последующие строки) - числовое значение соответвующей цены.
Чтобы не было разночтений, в массиве каждый элемент первого уровня или должен быть списком, или нужно сортировать ключи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы