@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?
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ответы на вопрос 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", значения (вторая и последующие строки) - числовое значение соответвующей цены.
Чтобы не было разночтений, в массиве каждый элемент первого уровня или должен быть списком, или нужно сортировать ключи.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 11:55
1000 руб./за проект
27 апр. 2024, в 11:55
1500 руб./за проект
27 апр. 2024, в 11:52
12000 руб./за проект