Задать вопрос
@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?
  • Вопрос задан
  • 314 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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", значения (вторая и последующие строки) - числовое значение соответвующей цены.
Чтобы не было разночтений, в массиве каждый элемент первого уровня или должен быть списком, или нужно сортировать ключи.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽