За последние 24 часа нас посетили 125011 программистов и 6589 роботов. Сейчас ищут 1702 программиста ...

слияние двух массивов из json

Тема в разделе "PHP для новичков", создана пользователем thunderpick, 18 сен 2023.

Метки:
  1. thunderpick

    thunderpick Активный пользователь

    С нами с:
    10 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Москва
    Приветствую!

    Есть json вида
    Код (Javascript):
    1. "PROPERTIES": {
    2.         "CRI": ", 80",
    3.         "IP": "IP66",
    4.         "Высота": "6 см",
    5.         "Высота в упаковке": "8 см",
    6.         "Гарантия": "5 лет",
    7.         "Длина": "6.45 см",
    8.         "Длина в упаковке": "10 см",
    9.         "КСС": "Г10х60, Г30, Г40, Г60, Г80, К10, К15, К8",
    10.         "Класс защиты": "2",
    11.         "Коэффициент мощности драйвера, λ": "≥0,5",
    12.         "Коэффициент пульсаций светового потока, %": "≤5",
    13.         "Крепление": "поворотное крепление",
    14.         "Масса": "0.146 кг",
    15.         "Мощность": "3 Вт",
    16.         "Объем в упаковке": "0.001 м3",
    17.         "Световой поток": "0 - 249 лм",
    18.         "Температура эксплуатации": "от -60 до +50 °C",
    19.         "УХЛ": "УХЛ1",
    20.         "Цветовая температура": "B (голубой), G (зеленый), R (красный), 3000K, 4000K, 5000K",
    21.         "Частота": "50 Гц",
    22.         "Ширина": "6.87 см",
    23.         "Ширина в упаковке": "10 см"
    24.       }
    и несколько SKU вида
    Код (Javascript):
    1. "SKU": [
    2.         {
    3.           "CRI": "80",
    4.           "IP": "IP66",
    5.           "Артикул": "MS3-2132-123-128",
    6.           "Высота": "6 см",
    7.           "Высота в упаковке": "8 см",
    8.           "Длина": "6.45 см",
    9.           "Длина в упаковке": "10 см",
    10.           "КСС": "Г10х60",
    11.           "Класс защиты": "2",
    12.           "Крепление": "поворотное крепление",
    13.           "Масса": "0.146 кг",
    14.           "Мощность": "3 Вт",
    15.           "Объем в упаковке": "0.001 м3",
    16.           "Световой поток": "200 лм",
    17.           "Тип рассеивателя": "прозрачный рассеиватель",
    18.           "УХЛ": "УХЛ1",
    19.           "Цветовая температура": "3000K",
    20.           "Цена": "4 000",
    21.           "Ширина": "6.87 см",
    22.           "Ширина в упаковке": "10 см"
    23.         },
    24.         {
    25.           "CRI": "80",
    26.           "IP": "IP66",
    27.           "Артикул": "MS3-2142-123-128",
    28.           "Высота": "6 см",
    29.           "Высота в упаковке": "8 см",
    30.           "Длина": "6.45 см",
    31.           "Длина в упаковке": "10 см",
    32.           "КСС": "Г10х60",
    33.           "Класс защиты": "2",
    34.           "Крепление": "поворотное крепление",
    35.           "Масса": "0.146 кг",
    36.           "Мощность": "3 Вт",
    37.           "Объем в упаковке": "0.001 м3",
    38.           "Световой поток": "211 лм",
    39.           "Тип рассеивателя": "прозрачный рассеиватель",
    40.           "УХЛ": "УХЛ1",
    41.           "Цветовая температура": "4000K",
    42.           "Цена": "3 600",
    43.           "Ширина": "6.87 см",
    44.           "Ширина в упаковке": "10 см"
    45.         }
    46. ]
    для каждого SKU делаю так
    PHP:
    1. foreach($json['products'] as $k => &$product) {
    2.   $properties = $product['PROPERTIES'];
    3.   foreach($product['SKU'] as $n => $sku) {
    4.     foreach($properties as $name => $value) {
    5.       if(!array_key_exists($name, $product['SKU'][$n])) {
    6.         $product['SKU'][$n][$name] = $value;
    7.       }
    8.     }
    9.   }
    10. }
    ну и получаю
    Код (Javascript):
    1. "SKU": [
    2.         {
    3.           "CRI": "80",
    4.           "IP": "IP66",
    5.           "Высота": "6 см",
    6.           "Высота в упаковке": "8 см",
    7.           "Гарантия": "5 лет",
    8.           "Длина": "6.45 см",
    9.           "Длина в упаковке": "10 см",
    10.           "КСС": "Г10х60",
    11.           "Класс защиты": "2",
    12.           "Коэффициент мощности драйвера, λ": "≥0,5",
    13.           "Коэффициент пульсаций светового потока, %": "≤5",
    14.           "Крепление": "поворотное крепление",
    15.           "Масса": "0.146 кг",
    16.           "Мощность": "3 Вт",
    17.           "Объем в упаковке": "0.001 м3",
    18.           "Световой поток": "0 - 249 лм",
    19.           "Температура эксплуатации": "от -60 до +50 °C",
    20.           "УХЛ": "УХЛ1",
    21.           "Цветовая температура": "B (голубой), G (зеленый), R (красный), 3000K, 4000K, 5000K",
    22.           "Частота": "50 Гц",
    23.           "Ширина": "6.87 см",
    24.           "Артикул": "MS3-2132-123-128",
    25.           "Световой поток": "200 лм",
    26.           "Тип рассеивателя": "прозрачный рассеиватель",
    27.           "Цветовая температура": "3000K",
    28.           "Цена": "4 000"
    29.         },
    30.         ...
    31. ]
    Вопрос. Как избежать дублей? Пример Цветовая температура
    Заранее благодарен.
     
  2. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Вот в этом месте
    Код (Text):
    1. if(!array_key_exists($name, $product['SKU'][$n])) {
    2.         $product['SKU'][$n][$name] = $value;
    3.       }
    не совсем понятна логика.
     
  3. thunderpick

    thunderpick Активный пользователь

    С нами с:
    10 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Москва
    если в массиве $product['SKU'][$n] нет ключа $name
    были разные вариации
     
  4. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    ОК. Зайдем с другой стороны.
    Покажите массивы оригиналы (var_export()) и ожидаемый результат
     
  5. thunderpick

    thunderpick Активный пользователь

    С нами с:
    10 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Москва
    закрывайте, пробелы разные.
    upload_2023-9-20_12-50-35.png